# PLC 프로그램 분석 보고서

## 전체 요약과 분석 범위

프로젝트: plc&#45;insight&#45;sample.zip

보고서 상태: 일부 분석 한계 있음

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 블록 수 | 1 |  |
| 네트워크 수 | 1 |  |
| 호출 위치 수 | 0 |  |
| 연결한 호출 수 | 0 |  |
| 알려진 시스템 호출 수 | 0 |  |
| 미연결 호출 수 | 0 |  |
| 읽은 파일 수 | 1 |  |
| 실패 파일 수 | 0 |  |
| 지원 밖 파일 수 | 0 |  |
| 추출한 쓰기 규칙 | 6 |  |
| 지원 구문 규칙 | 2 |  |
| 일부 조건·상태 미확인 규칙 | 4 |  |
| 호출 인자로 연결한 쓰기 조건 | 0 |  |

프로그램에서 확인한 구조와 코드 조건을 설명합니다. 호출 인자로 연결한 조건도 해당 함수가 실행될 때의 조건입니다. 실제 장애 원인을 판단하려면 운전 값과 이력이 필요합니다.

이 보고서는 모델 해석 없이 코드 사실을 정리한 결과입니다.

### 목차

- [프로그램 구조](#section-structure)
- [기능별 동작 조건](#section-conditions)
- [검토 사항](#section-review)
- [알람·해제 검사](#section-alarm_checks)
- [알람 원인 분석](#section-alarm_causes)
- [원본 근거 부록](#sources)

제공된 내보내기 범위: {&#x27;parsed&#x27;: 1}; ; SCL

발견 목록 3개 중 분석 대상 3개. 보조 신호·구조: {}. 확인된 실제 알람 수와 구분합니다.

<a id="section-structure"></a>

## 프로그램 구조

분석 상태: 선택 범위 분석 완료

| 블록 | 종류 | 언어 | 네트워크 | 호출 위치 |
| --- | --- | --- | --- | --- |
| FB&#95;DemoAlarms | FB | SCL | 1 | 0 |

<a id="section-conditions"></a>

## 기능별 동작 조건

분석 상태: 선택 범위 분석 완료

직접 대입·코일과 실제 호출 대상의 조건을 이 장에서 제공합니다. 확인한 상위 호출 조건과 중간 값의 출처를 연결하며, 시간·이전 상태·연결하지 못한 조건은 별도로 표시합니다.

<details>
<summary>FB&#95;DemoAlarms (6)</summary>

#### &#35;Alarm&#95;DriveNotReady

실제 태그와 원본 호출 조건에 연결한 쓰기 규칙입니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 대상 | &#35;Alarm&#95;DriveNotReady | [10](#source-10) [12](#source-12) |
| 동작 | assign | [10](#source-10) [12](#source-12) |
| 실행 조건 | &#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41; | [10](#source-10) [12](#source-12) |
| 기록할 값 | TRUE | [10](#source-10) [12](#source-12) |
| 호출 경로 | FB&#95;DemoAlarms | [10](#source-10) [12](#source-12) |
| 조건 분석 상태 | supported | [10](#source-10) [12](#source-12) |
| 조건 확인 상태 | supported | [10](#source-10) [12](#source-12) |
| 기록 값 확인 상태 | supported | [10](#source-10) [12](#source-12) |

- Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified

</details>

#### &#35;Alarm&#95;DriveNotReady

실제 태그와 원본 호출 조건에 연결한 쓰기 규칙입니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 대상 | &#35;Alarm&#95;DriveNotReady | [12](#source-12) [17](#source-17) |
| 동작 | assign | [12](#source-12) [17](#source-17) |
| 실행 조건 | &#40;NOT &#40;&#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;&#41; AND &#35;DriveReady&#41; | [12](#source-12) [17](#source-17) |
| 기록할 값 | FALSE | [12](#source-12) [17](#source-17) |
| 호출 경로 | FB&#95;DemoAlarms | [12](#source-12) [17](#source-17) |
| 조건 분석 상태 | supported | [12](#source-12) [17](#source-17) |
| 조건 확인 상태 | supported | [12](#source-12) [17](#source-17) |
| 기록 값 확인 상태 | supported | [12](#source-12) [17](#source-17) |

- Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified

</details>

#### &#35;Alarm&#95;HighPressure

실제 태그와 원본 호출 조건에 연결한 쓰기 규칙입니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 대상 | &#35;Alarm&#95;HighPressure | [13](#source-13) [21](#source-21) |
| 동작 | assign | [13](#source-13) [21](#source-21) |
| 실행 조건 | &#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41; | [13](#source-13) [21](#source-21) |
| 기록할 값 | TRUE | [13](#source-13) [21](#source-21) |
| 호출 경로 | FB&#95;DemoAlarms | [13](#source-13) [21](#source-21) |
| 조건 분석 상태 | supported | [13](#source-13) [21](#source-21) |
| 조건 확인 상태 | supported | [13](#source-13) [21](#source-21) |
| 기록 값 확인 상태 | supported | [13](#source-13) [21](#source-21) |

- Complex control flow or function evaluation is not verified
- Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified

</details>

#### &#35;Alarm&#95;HighPressure

실제 태그와 원본 호출 조건에 연결한 쓰기 규칙입니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 대상 | &#35;Alarm&#95;HighPressure | [1](#source-1) [21](#source-21) |
| 동작 | assign | [1](#source-1) [21](#source-21) |
| 실행 조건 | &#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41; | [1](#source-1) [21](#source-21) |
| 기록할 값 | FALSE | [1](#source-1) [21](#source-21) |
| 호출 경로 | FB&#95;DemoAlarms | [1](#source-1) [21](#source-21) |
| 조건 분석 상태 | supported | [1](#source-1) [21](#source-21) |
| 조건 확인 상태 | supported | [1](#source-1) [21](#source-21) |
| 기록 값 확인 상태 | supported | [1](#source-1) [21](#source-21) |

- Complex control flow or function evaluation is not verified
- Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified

</details>

#### &#35;Alarm&#95;SensorFault

실제 태그와 원본 호출 조건에 연결한 쓰기 규칙입니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 대상 | &#35;Alarm&#95;SensorFault | [2](#source-2) [16](#source-16) |
| 동작 | assign | [2](#source-2) [16](#source-16) |
| 실행 조건 | &#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41; | [2](#source-2) [16](#source-16) |
| 기록할 값 | TRUE | [2](#source-2) [16](#source-16) |
| 호출 경로 | FB&#95;DemoAlarms | [2](#source-2) [16](#source-16) |
| 조건 분석 상태 | supported | [2](#source-2) [16](#source-16) |
| 조건 확인 상태 | supported | [2](#source-2) [16](#source-16) |
| 기록 값 확인 상태 | supported | [2](#source-2) [16](#source-16) |

- Complex control flow or function evaluation is not verified
- Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified

</details>

#### &#35;Alarm&#95;SensorFault

실제 태그와 원본 호출 조건에 연결한 쓰기 규칙입니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 대상 | &#35;Alarm&#95;SensorFault | [2](#source-2) [8](#source-8) |
| 동작 | assign | [2](#source-2) [8](#source-8) |
| 실행 조건 | &#40;NOT &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;SensorStatus &#61; WORD&#35;0&#41;&#41;&#41; | [2](#source-2) [8](#source-8) |
| 기록할 값 | FALSE | [2](#source-2) [8](#source-8) |
| 호출 경로 | FB&#95;DemoAlarms | [2](#source-2) [8](#source-8) |
| 조건 분석 상태 | supported | [2](#source-2) [8](#source-8) |
| 조건 확인 상태 | supported | [2](#source-2) [8](#source-8) |
| 기록 값 확인 상태 | supported | [2](#source-2) [8](#source-8) |

- Complex control flow or function evaluation is not verified
- Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified

</details>

</details>

<a id="section-review"></a>

## 검토 사항

분석 상태: 선택 범위 분석 완료

### 조건을 완전히 추적하지 못한 로직

분석 범위 또는 내보낸 자료에서 확인할 항목입니다. PLC 코드 결함 판정은 아닙니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 건수 | 4 |  |
| 원본 위치·분석 결과 | src/FB&#95;DemoAlarms.scl: Complex control flow or function evaluation is not verified | [16](#source-16) |
| 원본 위치·분석 결과 | src/FB&#95;DemoAlarms.scl: Complex control flow or function evaluation is not verified | [8](#source-8) |
| 원본 위치·분석 결과 | src/FB&#95;DemoAlarms.scl: Complex control flow or function evaluation is not verified | [1](#source-1) |
| 원본 위치·분석 결과 | src/FB&#95;DemoAlarms.scl: Complex control flow or function evaluation is not verified | [13](#source-13) |

- 분석 범위: rule&#95;semantics&#95;partial

</details>

### scl&#95;semantics&#95;subset

분석 범위 또는 내보낸 자료에서 확인할 항목입니다. PLC 코드 결함 판정은 아닙니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 건수 | 1 |  |
| 원본 위치·분석 결과 | src/FB&#95;DemoAlarms.scl: SCL extraction covers declarations, calls, references, assignments and conditions; control flow and indirect effects are not verified | [3](#source-3) |

- 분석 범위: scl&#95;semantics&#95;subset

</details>

### FB&#95;DemoAlarms.Alarm&#95;DriveNotReady

복수의 정적 쓰기 위치가 있습니다. 호출 조건과 실행 순서를 검토하세요.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 쓰기 위치 | Alarm&#95;DriveNotReady | [18](#source-18) |
| 쓰기 위치 | Alarm&#95;DriveNotReady | [15](#source-15) |
| 대상 | &#35;Alarm&#95;DriveNotReady | [17](#source-17) |
| 동작 | 대입 | [17](#source-17) |
| 실행 조건 | &#40;&#40;NOT &#40;&#40;&#35; DriveStart AND NOT &#35; DriveReady&#41;&#41;&#41; AND &#40;&#35; DriveReady&#41;&#41; | [17](#source-17) |
| 기록할 값 | FALSE | [17](#source-17) |
| 내보내기 내 위치 | 4 | [17](#source-17) |
| 조건 분석 상태 | supported | [17](#source-17) |
| 대상 | &#35;Alarm&#95;DriveNotReady | [10](#source-10) |
| 동작 | 대입 | [10](#source-10) |
| 실행 조건 | &#40;&#40;&#35; DriveStart AND NOT &#35; DriveReady&#41;&#41; | [10](#source-10) |
| 기록할 값 | TRUE | [10](#source-10) |
| 내보내기 내 위치 | 3 | [10](#source-10) |
| 조건 분석 상태 | supported | [10](#source-10) |


</details>

### FB&#95;DemoAlarms.Alarm&#95;HighPressure

복수의 정적 쓰기 위치가 있습니다. 호출 조건과 실행 순서를 검토하세요.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 쓰기 위치 | Alarm&#95;HighPressure | [22](#source-22) |
| 쓰기 위치 | Alarm&#95;HighPressure | [14](#source-14) |
| 대상 | &#35;Alarm&#95;HighPressure | [1](#source-1) |
| 동작 | 대입 | [1](#source-1) |
| 실행 조건 | &#40;&#40;NOT &#40;&#40;&#35; PumpRunning AND &#40; &#35; PressureBar &gt;&#61; REAL &#35; 8.5 &#41;&#41;&#41;&#41; AND &#40;&#35; Reset AND &#40; &#35; PressureBar &lt; REAL &#35; 7.5 &#41;&#41;&#41; | [1](#source-1) |
| 기록할 값 | FALSE | [1](#source-1) |
| 내보내기 내 위치 | 2 | [1](#source-1) |
| 조건 분석 상태 | partial | [1](#source-1) |
| 대상 | &#35;Alarm&#95;HighPressure | [13](#source-13) |
| 동작 | 대입 | [13](#source-13) |
| 실행 조건 | &#40;&#40;&#35; PumpRunning AND &#40; &#35; PressureBar &gt;&#61; REAL &#35; 8.5 &#41;&#41;&#41; | [13](#source-13) |
| 기록할 값 | TRUE | [13](#source-13) |
| 내보내기 내 위치 | 1 | [13](#source-13) |
| 조건 분석 상태 | partial | [13](#source-13) |


</details>

### FB&#95;DemoAlarms.Alarm&#95;SensorFault

복수의 정적 쓰기 위치가 있습니다. 호출 조건과 실행 순서를 검토하세요.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 쓰기 위치 | Alarm&#95;SensorFault | [6](#source-6) |
| 쓰기 위치 | Alarm&#95;SensorFault | [5](#source-5) |
| 대상 | &#35;Alarm&#95;SensorFault | [16](#source-16) |
| 동작 | 대입 | [16](#source-16) |
| 실행 조건 | &#40;&#40;&#35; SensorStatus &lt;&gt; WORD &#35; 0&#41;&#41; | [16](#source-16) |
| 기록할 값 | TRUE | [16](#source-16) |
| 내보내기 내 위치 | 5 | [16](#source-16) |
| 조건 분석 상태 | partial | [16](#source-16) |
| 대상 | &#35;Alarm&#95;SensorFault | [8](#source-8) |
| 동작 | 대입 | [8](#source-8) |
| 실행 조건 | &#40;&#40;NOT &#40;&#40;&#35; SensorStatus &lt;&gt; WORD &#35; 0&#41;&#41;&#41; AND &#40;&#35; Reset AND &#40; &#35; SensorStatus &#61; WORD &#35; 0 &#41;&#41;&#41; | [8](#source-8) |
| 기록할 값 | FALSE | [8](#source-8) |
| 내보내기 내 위치 | 6 | [8](#source-8) |
| 조건 분석 상태 | partial | [8](#source-8) |


</details>

<a id="section-alarm_checks"></a>

## 알람·해제 검사

분석 상태: 선택 범위 분석 완료

확인된 코드 사실: 3; 검토 후보: 0; 판단 자료 부족: 0

이름 기반 후보는 알람 여부와 TRUE&#61;발생/FALSE&#61;해제 관례를 확인해야 합니다. TRUE/FALSE 원본 쓰기 경로와 조건의 도달 가능성 검증을 구분합니다. 숫자 코드는 대응표가 있어야 발생·해제로 분류합니다. 리셋·확인 태그는 원본에서 실제로 참조한 경로를 표시하며, 이름만으로 역할을 확정하지 않습니다. 실제 시간·운전 상태는 미확인입니다.

| 대상 | 코드 판정 | 확인 내용 |
| --- | --- | --- |
| FB&#95;DemoAlarms.Alarm&#95;DriveNotReady | 확인된 코드 사실 | 확인한 규칙에 발생 값과 해제 값을 기록할 수 있는 경로가 있습니다. 실제 알람 상태와 호출 순서는 운전 자료로 확인해야 합니다. |
| FB&#95;DemoAlarms.Alarm&#95;HighPressure | 확인된 코드 사실 | 확인한 규칙에 발생 값과 해제 값을 기록할 수 있는 경로가 있습니다. 실제 알람 상태와 호출 순서는 운전 자료로 확인해야 합니다. |
| FB&#95;DemoAlarms.Alarm&#95;SensorFault | 확인된 코드 사실 | 확인한 규칙에 발생 값과 해제 값을 기록할 수 있는 경로가 있습니다. 실제 알람 상태와 호출 순서는 운전 자료로 확인해야 합니다. |

### FB&#95;DemoAlarms.Alarm&#95;DriveNotReady

**확인된 코드 사실**

확인한 규칙에 발생 값과 해제 값을 기록할 수 있는 경로가 있습니다. 실제 알람 상태와 호출 순서는 운전 자료로 확인해야 합니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 검사 판정 | 확인된 코드 사실 | [9](#source-9) [10](#source-10) [12](#source-12) [17](#source-17) [23](#source-23) |
| 분류 근거 | 사용자가 지정한 태그 | [12](#source-12) |
| 경로 집계 | assertion: 1; clearing: 1; source TRUE: 0; source FALSE: 0; unverified: 0; unconditional clear: 0 | [9](#source-9) [10](#source-10) [12](#source-12) [17](#source-17) [23](#source-23) |
| 알람 값 관례 | 고객 제공 대응표 | [9](#source-9) [10](#source-10) [12](#source-12) [17](#source-17) [23](#source-23) |
| 쓰기 위치 | Wd28508dfc9bdcbb287bd: FB&#95;DemoAlarms | [10](#source-10) [12](#source-12) |
| 원본 블록 | FB&#95;DemoAlarms | [10](#source-10) [12](#source-12) |
| 실행 프레임 | FB&#95;DemoAlarms | [10](#source-10) [12](#source-12) |
| 대상 | &#35;Alarm&#95;DriveNotReady | [10](#source-10) [12](#source-12) |
| 동작 | assign | [10](#source-10) [12](#source-12) |
| 실행 조건 | &#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41; | [10](#source-10) [12](#source-12) |
| 기록할 값 | TRUE | [10](#source-10) [12](#source-12) |
| 조건 분석 상태 | supported | [10](#source-10) [12](#source-12) |
| 조건 확인 상태 | supported | [10](#source-10) [12](#source-12) |
| 기록 값 확인 상태 | supported | [10](#source-10) [12](#source-12) |
| 명령 효과 확인 상태 | supported | [10](#source-10) [12](#source-12) |
| 분석 한계 | Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified | [10](#source-10) [12](#source-12) |
| 쓰기 위치 | Wf31788448f8ca318e72b: FB&#95;DemoAlarms | [12](#source-12) [17](#source-17) |
| 원본 블록 | FB&#95;DemoAlarms | [12](#source-12) [17](#source-17) |
| 실행 프레임 | FB&#95;DemoAlarms | [12](#source-12) [17](#source-17) |
| 대상 | &#35;Alarm&#95;DriveNotReady | [12](#source-12) [17](#source-17) |
| 동작 | assign | [12](#source-12) [17](#source-17) |
| 실행 조건 | &#40;NOT &#40;&#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;&#41; AND &#35;DriveReady&#41; | [12](#source-12) [17](#source-17) |
| 기록할 값 | FALSE | [12](#source-12) [17](#source-17) |
| 조건 분석 상태 | supported | [12](#source-12) [17](#source-17) |
| 조건 확인 상태 | supported | [12](#source-12) [17](#source-17) |
| 기록 값 확인 상태 | supported | [12](#source-12) [17](#source-17) |
| 명령 효과 확인 상태 | supported | [12](#source-12) [17](#source-17) |
| 분석 한계 | Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified | [12](#source-12) [17](#source-17) |
| 알람 코드·값 의미 | TRUE: 준비 미완료 알람 발생; state&#61;asserted; basis&#61;customer&#95;convention; source&#95;paths&#61;1; unverified&#95;paths&#61;0 | [9](#source-9) [10](#source-10) [12](#source-12) [23](#source-23) |
| 알람 코드·값 의미 | FALSE: 준비 미완료 알람 해제; state&#61;cleared; basis&#61;customer&#95;convention; source&#95;paths&#61;1; unverified&#95;paths&#61;0 | [9](#source-9) [12](#source-12) [17](#source-17) [23](#source-23) |


</details>

### FB&#95;DemoAlarms.Alarm&#95;HighPressure

**확인된 코드 사실**

확인한 규칙에 발생 값과 해제 값을 기록할 수 있는 경로가 있습니다. 실제 알람 상태와 호출 순서는 운전 자료로 확인해야 합니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 검사 판정 | 확인된 코드 사실 | [1](#source-1) [4](#source-4) [7](#source-7) [13](#source-13) [19](#source-19) [21](#source-21) |
| 분류 근거 | 사용자가 지정한 태그 | [21](#source-21) |
| 경로 집계 | assertion: 1; clearing: 1; source TRUE: 0; source FALSE: 0; unverified: 0; unconditional clear: 0 | [1](#source-1) [4](#source-4) [7](#source-7) [13](#source-13) [19](#source-19) [21](#source-21) |
| 알람 값 관례 | 고객 제공 대응표 | [1](#source-1) [4](#source-4) [7](#source-7) [13](#source-13) [19](#source-19) [21](#source-21) |
| 쓰기 위치 | W3b68b315dc8ce8b62ae6: FB&#95;DemoAlarms | [13](#source-13) [21](#source-21) |
| 원본 블록 | FB&#95;DemoAlarms | [13](#source-13) [21](#source-21) |
| 실행 프레임 | FB&#95;DemoAlarms | [13](#source-13) [21](#source-21) |
| 대상 | &#35;Alarm&#95;HighPressure | [13](#source-13) [21](#source-21) |
| 동작 | assign | [13](#source-13) [21](#source-21) |
| 실행 조건 | &#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41; | [13](#source-13) [21](#source-21) |
| 기록할 값 | TRUE | [13](#source-13) [21](#source-21) |
| 조건 분석 상태 | supported | [13](#source-13) [21](#source-21) |
| 조건 확인 상태 | supported | [13](#source-13) [21](#source-21) |
| 기록 값 확인 상태 | supported | [13](#source-13) [21](#source-21) |
| 명령 효과 확인 상태 | supported | [13](#source-13) [21](#source-21) |
| 분석 한계 | Complex control flow or function evaluation is not verified | [13](#source-13) [21](#source-21) |
| 분석 한계 | Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified | [13](#source-13) [21](#source-21) |
| 쓰기 위치 | Wb2cc0217cdf884ce0dfb: FB&#95;DemoAlarms | [1](#source-1) [21](#source-21) |
| 원본 블록 | FB&#95;DemoAlarms | [1](#source-1) [21](#source-21) |
| 실행 프레임 | FB&#95;DemoAlarms | [1](#source-1) [21](#source-21) |
| 대상 | &#35;Alarm&#95;HighPressure | [1](#source-1) [21](#source-21) |
| 동작 | assign | [1](#source-1) [21](#source-21) |
| 실행 조건 | &#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41; | [1](#source-1) [21](#source-21) |
| 기록할 값 | FALSE | [1](#source-1) [21](#source-21) |
| 조건 분석 상태 | supported | [1](#source-1) [21](#source-21) |
| 조건 확인 상태 | supported | [1](#source-1) [21](#source-21) |
| 기록 값 확인 상태 | supported | [1](#source-1) [21](#source-21) |
| 명령 효과 확인 상태 | supported | [1](#source-1) [21](#source-21) |
| 분석 한계 | Complex control flow or function evaluation is not verified | [1](#source-1) [21](#source-21) |
| 분석 한계 | Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified | [1](#source-1) [21](#source-21) |
| 알람 코드·값 의미 | TRUE: 고압 알람 발생; state&#61;asserted; basis&#61;customer&#95;convention; source&#95;paths&#61;1; unverified&#95;paths&#61;0 | [4](#source-4) [7](#source-7) [13](#source-13) [19](#source-19) [21](#source-21) |
| 알람 코드·값 의미 | FALSE: 고압 알람 해제; state&#61;cleared; basis&#61;customer&#95;convention; source&#95;paths&#61;1; unverified&#95;paths&#61;0 | [1](#source-1) [4](#source-4) [7](#source-7) [19](#source-19) [21](#source-21) |
| 리셋·확인 참조 경로 | FB&#95;DemoAlarms.Reset: reset; Wb2cc0217cdf884ce0dfb; guard&#61;True; value&#61;False; customer&#95;role&#95;source&#95;dependency | [1](#source-1) [19](#source-19) [21](#source-21) |


</details>

### FB&#95;DemoAlarms.Alarm&#95;SensorFault

**확인된 코드 사실**

확인한 규칙에 발생 값과 해제 값을 기록할 수 있는 경로가 있습니다. 실제 알람 상태와 호출 순서는 운전 자료로 확인해야 합니다.

<details>
<summary>코드 사실과 확인 사항</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 검사 판정 | 확인된 코드 사실 | [2](#source-2) [8](#source-8) [16](#source-16) [19](#source-19) [20](#source-20) |
| 분류 근거 | 사용자가 지정한 태그 | [2](#source-2) |
| 경로 집계 | assertion: 1; clearing: 1; source TRUE: 0; source FALSE: 0; unverified: 0; unconditional clear: 0 | [2](#source-2) [8](#source-8) [16](#source-16) [19](#source-19) [20](#source-20) |
| 알람 값 관례 | 고객 제공 대응표 | [2](#source-2) [8](#source-8) [16](#source-16) [19](#source-19) [20](#source-20) |
| 쓰기 위치 | W36437bc80df2f485115b: FB&#95;DemoAlarms | [2](#source-2) [16](#source-16) |
| 원본 블록 | FB&#95;DemoAlarms | [2](#source-2) [16](#source-16) |
| 실행 프레임 | FB&#95;DemoAlarms | [2](#source-2) [16](#source-16) |
| 대상 | &#35;Alarm&#95;SensorFault | [2](#source-2) [16](#source-16) |
| 동작 | assign | [2](#source-2) [16](#source-16) |
| 실행 조건 | &#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41; | [2](#source-2) [16](#source-16) |
| 기록할 값 | TRUE | [2](#source-2) [16](#source-16) |
| 조건 분석 상태 | supported | [2](#source-2) [16](#source-16) |
| 조건 확인 상태 | supported | [2](#source-2) [16](#source-16) |
| 기록 값 확인 상태 | supported | [2](#source-2) [16](#source-16) |
| 명령 효과 확인 상태 | supported | [2](#source-2) [16](#source-16) |
| 분석 한계 | Complex control flow or function evaluation is not verified | [2](#source-2) [16](#source-16) |
| 분석 한계 | Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified | [2](#source-2) [16](#source-16) |
| 쓰기 위치 | Wf138b1e9a49f7411626d: FB&#95;DemoAlarms | [2](#source-2) [8](#source-8) |
| 원본 블록 | FB&#95;DemoAlarms | [2](#source-2) [8](#source-8) |
| 실행 프레임 | FB&#95;DemoAlarms | [2](#source-2) [8](#source-8) |
| 대상 | &#35;Alarm&#95;SensorFault | [2](#source-2) [8](#source-8) |
| 동작 | assign | [2](#source-2) [8](#source-8) |
| 실행 조건 | &#40;NOT &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;SensorStatus &#61; WORD&#35;0&#41;&#41;&#41; | [2](#source-2) [8](#source-8) |
| 기록할 값 | FALSE | [2](#source-2) [8](#source-8) |
| 조건 분석 상태 | supported | [2](#source-2) [8](#source-8) |
| 조건 확인 상태 | supported | [2](#source-2) [8](#source-8) |
| 기록 값 확인 상태 | supported | [2](#source-2) [8](#source-8) |
| 명령 효과 확인 상태 | supported | [2](#source-2) [8](#source-8) |
| 분석 한계 | Complex control flow or function evaluation is not verified | [2](#source-2) [8](#source-8) |
| 분석 한계 | Value/transfer analysis: primitive&#95;transfer&#95;types&#95;verified | [2](#source-2) [8](#source-8) |
| 알람 코드·값 의미 | TRUE: 센서 상태 이상 알람 발생; state&#61;asserted; basis&#61;customer&#95;convention; source&#95;paths&#61;1; unverified&#95;paths&#61;0 | [2](#source-2) [16](#source-16) [19](#source-19) [20](#source-20) |
| 알람 코드·값 의미 | FALSE: 센서 상태 이상 알람 해제; state&#61;cleared; basis&#61;customer&#95;convention; source&#95;paths&#61;1; unverified&#95;paths&#61;0 | [2](#source-2) [8](#source-8) [19](#source-19) [20](#source-20) |
| 리셋·확인 참조 경로 | FB&#95;DemoAlarms.Reset: reset; Wf138b1e9a49f7411626d; guard&#61;True; value&#61;False; customer&#95;role&#95;source&#95;dependency | [2](#source-2) [8](#source-8) [19](#source-19) |


</details>

<a id="section-alarm_causes"></a>

## 알람 원인 분석

분석 상태: 일부 분석 한계 있음

PLC 코드만으로 분석합니다. BOOL은 고객 대응표가 없으면 TRUE/FALSE 쓰기 조건으로 구분하고, 숫자 0을 정상값으로 가정하지 않습니다. 공유 원인 관계 그래프는 JSON에 한 번 저장하며 모든 알람에서 참조합니다.

아래 조건은 코드가 알람 값을 기록하는 경로입니다. 실제 고장 원인, 스캔 중 최종 값과 최초 발생 순서는 운전 자료 없이 확정할 수 없습니다.

분석 대상 3개: 코드 쓰기 경로 확보 3개, 미확보 0개. 이름 기반 후보 수는 고객이 확인한 실제 알람 수와 다릅니다.

<a id="alarm-Dd94a8ef4b2df0736fe84"></a>
### FB&#95;DemoAlarms.Alarm&#95;DriveNotReady

분석 상태: 쓰기 경로: 확인됨; 조건 구조: 확인됨; 기록 값: 확인됨; 쓰기 효과: 확인됨; 선언·자료형: 확인됨; 상위 원천: 일부 확인; 값의 의미: 고객 값 대응표; 시간·이전 상태: 해당 없음

미확인 사유(알람별 고유 위치 수): {&#x27;external&#95;input&#x27;: 2}

고객 지정 설명: 교육용 예제: DriveStart&#61;TRUE는 기동 요청, DriveReady&#61;TRUE는 준비 완료로 정의합니다.

**분기별 원인 조건**

asserted 값 TRUE의 코드 조건: 모두 충족 &#91;&#35;DriveStart; 다음 조건의 부정: &#40;&#35;DriveReady&#41;; 내부 조건이 FALSE여야 합니다&#93; [9](#source-9) [10](#source-10) [12](#source-12) [23](#source-23)

실행 허용: &#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;

기록할 식: TRUE

&#35;Alarm&#95;DriveNotReady; 이 원본 쓰기의 실행 조건: &#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;; NOT &#40;&#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;&#41;이면 이 원본 쓰기는 값을 기록하지 않습니다; 같은 대상에 기록하는 다른 원본 쓰기 수: 1; 최종 태그 값·알람 해제·상태 유지는 미확인입니다. 다른 쓰기와 외부 쓰기, 스캔 실행 및 이전 값을 확인해야 합니다; 실제 실행은 관측하지 않았습니다; 작성 블록: FB&#95;DemoAlarms; 호출 프레임: FB&#95;DemoAlarms [10](#source-10) [12](#source-12)

**분기별 원인 조건**

cleared 값 FALSE의 코드 조건: 모두 충족 &#91;다음 조건의 부정: &#40;모두 충족 &#91;&#35;DriveStart; 다음 조건의 부정: &#40;&#35;DriveReady&#41;; 내부 조건이 FALSE여야 합니다&#93;&#41;; 내부 조건이 FALSE여야 합니다; &#35;DriveReady&#93; [9](#source-9) [12](#source-12) [17](#source-17) [23](#source-23)

실행 허용: &#40;NOT &#40;&#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;&#41; AND &#35;DriveReady&#41;

기록할 식: FALSE

&#35;Alarm&#95;DriveNotReady; 이 원본 쓰기의 실행 조건: &#40;NOT &#40;&#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;&#41; AND &#35;DriveReady&#41;; NOT &#40;&#40;NOT &#40;&#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;&#41; AND &#35;DriveReady&#41;&#41;이면 이 원본 쓰기는 값을 기록하지 않습니다; 같은 대상에 기록하는 다른 원본 쓰기 수: 1; 최종 태그 값·알람 해제·상태 유지는 미확인입니다. 다른 쓰기와 외부 쓰기, 스캔 실행 및 이전 값을 확인해야 합니다; 실제 실행은 관측하지 않았습니다; 작성 블록: FB&#95;DemoAlarms; 호출 프레임: FB&#95;DemoAlarms [12](#source-12) [17](#source-17)

상태 유지·복귀: not&#95;established; priority&#61;source&#95;order; remanence&#61;

확인(acknowledge)이 해제를 뜻하는지는 해당 값을 바꾸는 코드 연결로 판단합니다.

| 경로 | 값 | 값 의미 | 코드 조건 | 조건 확인 | 원본 |
| --- | --- | --- | --- | --- | --- |
| 발생 값 | TRUE | 준비 미완료 알람 발생 | &#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41; | 조건을 만족하는 값 조합 있음 | [쓰기](#cause-Wd28508dfc9bdcbb287bd) [9](#source-9) [10](#source-10) [12](#source-12) [23](#source-23) |
| 해제 값 | FALSE | 준비 미완료 알람 해제 | &#40;NOT &#40;&#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;&#41; AND &#35;DriveReady&#41; | 조건을 만족하는 값 조합 있음 | [쓰기](#cause-Wf31788448f8ca318e72b) [9](#source-9) [12](#source-12) [17](#source-17) [23](#source-23) |

**조건·값에 직접 연결된 태그**

[FB&#95;DemoAlarms.DriveStart](#cause-T026b47688a12b5b3665a), [FB&#95;DemoAlarms.DriveReady](#cause-T722884e3d99af0e855fe)

**추적 끝의 입력·설정·상태 확인점**

| 태그 | 자료형 | 확인할 내용 | 근거 |
| --- | --- | --- | --- |
| [FB&#95;DemoAlarms.DriveStart](#cause-T026b47688a12b5b3665a) | BOOL | 프로그램 입력·실제 값 확인 | [23](#source-23) |
| [FB&#95;DemoAlarms.DriveReady](#cause-T722884e3d99af0e855fe) | BOOL | 프로그램 입력·실제 값 확인 | [9](#source-9) |

알람 발생 시 조건 태그와 위 경계 태그의 값을 같은 시점에 확보해 조건식과 대조하세요. 초기 선언값을 현재 값으로 사용하지 않습니다.

원인 추적 중 확인이 필요한 관계: 

- [FB&#95;DemoAlarms.DriveStart](#cause-gap-T026b47688a12b5b3665a): external&#95;input
- [FB&#95;DemoAlarms.DriveReady](#cause-gap-T722884e3d99af0e855fe): external&#95;input

<a id="alarm-D1654c82c3ecfe7d13bf4"></a>
### FB&#95;DemoAlarms.Alarm&#95;HighPressure

분석 상태: 쓰기 경로: 확인됨; 조건 구조: 확인됨; 기록 값: 확인됨; 쓰기 효과: 확인됨; 선언·자료형: 확인됨; 상위 원천: 일부 확인; 값의 의미: 고객 값 대응표; 시간·이전 상태: 해당 없음

미확인 사유(알람별 고유 위치 수): {&#x27;external&#95;input&#x27;: 3}

고객 지정 설명: 교육용 예제: 압력 입력 단위는 bar, TRUE는 고압 알람 발생 상태로 정의합니다.

**분기별 원인 조건**

asserted 값 TRUE의 코드 조건: 모두 충족 &#91;&#35;PumpRunning; &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#93; [4](#source-4) [7](#source-7) [13](#source-13) [21](#source-21)

실행 허용: &#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;

기록할 식: TRUE

&#35;Alarm&#95;HighPressure; 이 원본 쓰기의 실행 조건: &#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;; NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41;이면 이 원본 쓰기는 값을 기록하지 않습니다; 같은 대상에 기록하는 다른 원본 쓰기 수: 1; 최종 태그 값·알람 해제·상태 유지는 미확인입니다. 다른 쓰기와 외부 쓰기, 스캔 실행 및 이전 값을 확인해야 합니다; 실제 실행은 관측하지 않았습니다; 작성 블록: FB&#95;DemoAlarms; 호출 프레임: FB&#95;DemoAlarms [13](#source-13) [21](#source-21)

**분기별 원인 조건**

cleared 값 FALSE의 코드 조건: 모두 충족 &#91;다음 조건의 부정: &#40;모두 충족 &#91;&#35;PumpRunning; &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#93;&#41;; 내부 조건이 FALSE여야 합니다. 피연산자의 유효성이 미확인인 부동소수점 비교는 반대 부등식으로 바꾸지 않습니다; 모두 충족 &#91;&#35;Reset; &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#93;&#93; [1](#source-1) [4](#source-4) [7](#source-7) [19](#source-19) [21](#source-21)

실행 허용: &#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41;

기록할 식: FALSE

&#35;Alarm&#95;HighPressure; 이 원본 쓰기의 실행 조건: &#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41;; NOT &#40;&#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41;&#41;이면 이 원본 쓰기는 값을 기록하지 않습니다; 같은 대상에 기록하는 다른 원본 쓰기 수: 1; 최종 태그 값·알람 해제·상태 유지는 미확인입니다. 다른 쓰기와 외부 쓰기, 스캔 실행 및 이전 값을 확인해야 합니다; 실제 실행은 관측하지 않았습니다; 작성 블록: FB&#95;DemoAlarms; 호출 프레임: FB&#95;DemoAlarms [1](#source-1) [21](#source-21)

상·하한 조건부 쓰기: &#35;PressureBar [1](#source-1) [13](#source-13) [21](#source-21)

상한 조건/값: &#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41; → TRUE

하한 조건/값: &#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41; → FALSE

두 경로가 모두 실행되지 않는 조건: NOT &#40;&#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; OR &#40;&#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41;&#41;&#41;

이 조건에서 위 두 경로는 새 값을 쓰지 않습니다. 임계값의 순서와 다른 쓰기·이전 상태를 확인해야 실제 유지 구간을 판단할 수 있습니다.

상태 유지·복귀: not&#95;established; priority&#61;source&#95;order; remanence&#61;

확인(acknowledge)이 해제를 뜻하는지는 해당 값을 바꾸는 코드 연결로 판단합니다.

| 경로 | 값 | 값 의미 | 코드 조건 | 조건 확인 | 원본 |
| --- | --- | --- | --- | --- | --- |
| 발생 값 | TRUE | 고압 알람 발생 | &#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41; | 조건을 만족하는 값 조합 있음 | [쓰기](#cause-W3b68b315dc8ce8b62ae6) [4](#source-4) [7](#source-7) [13](#source-13) [21](#source-21) |
| 해제 값 | FALSE | 고압 알람 해제 | &#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41; | 조건을 만족하는 값 조합 있음 | [쓰기](#cause-Wb2cc0217cdf884ce0dfb) [1](#source-1) [4](#source-4) [7](#source-7) [19](#source-19) [21](#source-21) |

**조건·값에 직접 연결된 태그**

[FB&#95;DemoAlarms.PressureBar](#cause-T1d1695ebada9772d1455), [FB&#95;DemoAlarms.PumpRunning](#cause-T4a526346188f40405740), [FB&#95;DemoAlarms.Reset](#cause-T4f3ad56f4900140e4e87)

**추적 끝의 입력·설정·상태 확인점**

| 태그 | 자료형 | 확인할 내용 | 근거 |
| --- | --- | --- | --- |
| [FB&#95;DemoAlarms.PressureBar](#cause-T1d1695ebada9772d1455) | REAL | 프로그램 입력·실제 값 확인 | [4](#source-4) |
| [FB&#95;DemoAlarms.PumpRunning](#cause-T4a526346188f40405740) | BOOL | 프로그램 입력·실제 값 확인 | [7](#source-7) |
| [FB&#95;DemoAlarms.Reset](#cause-T4f3ad56f4900140e4e87) | BOOL | 프로그램 입력·실제 값 확인 | [19](#source-19) |

알람 발생 시 조건 태그와 위 경계 태그의 값을 같은 시점에 확보해 조건식과 대조하세요. 초기 선언값을 현재 값으로 사용하지 않습니다.

| 리셋·확인 참조 | 분류 근거 | 사용 위치 | 근거 |
| --- | --- | --- | --- |
| FB&#95;DemoAlarms.Reset: reset | 고객 지정 역할 | guard&#61;True; value&#61;False | [1](#source-1) [19](#source-19) [21](#source-21) |

원인 추적 중 확인이 필요한 관계: 

- [FB&#95;DemoAlarms.PressureBar](#cause-gap-T1d1695ebada9772d1455): external&#95;input
- [FB&#95;DemoAlarms.PumpRunning](#cause-gap-T4a526346188f40405740): external&#95;input
- [FB&#95;DemoAlarms.Reset](#cause-gap-T4f3ad56f4900140e4e87): external&#95;input

<a id="alarm-D72d96e965f1e013022d4"></a>
### FB&#95;DemoAlarms.Alarm&#95;SensorFault

분석 상태: 쓰기 경로: 확인됨; 조건 구조: 확인됨; 기록 값: 확인됨; 쓰기 효과: 확인됨; 선언·자료형: 확인됨; 상위 원천: 일부 확인; 값의 의미: 고객 값 대응표; 시간·이전 상태: 해당 없음

미확인 사유(알람별 고유 위치 수): {&#x27;external&#95;input&#x27;: 2}

고객 지정 설명: 교육용 예제: SensorStatus&#61;0은 정상, 0이 아닌 상태는 이상으로 명시한 예제 정의입니다.

**분기별 원인 조건**

asserted 값 TRUE의 코드 조건: &#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41; [2](#source-2) [16](#source-16) [20](#source-20)

실행 허용: &#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;

기록할 식: TRUE

&#35;Alarm&#95;SensorFault; 이 원본 쓰기의 실행 조건: &#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;; NOT &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41;이면 이 원본 쓰기는 값을 기록하지 않습니다; 같은 대상에 기록하는 다른 원본 쓰기 수: 1; 최종 태그 값·알람 해제·상태 유지는 미확인입니다. 다른 쓰기와 외부 쓰기, 스캔 실행 및 이전 값을 확인해야 합니다; 실제 실행은 관측하지 않았습니다; 작성 블록: FB&#95;DemoAlarms; 호출 프레임: FB&#95;DemoAlarms [2](#source-2) [16](#source-16)

**분기별 원인 조건**

cleared 값 FALSE의 코드 조건: 모두 충족 &#91;다음 조건의 부정: &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41;; 내부 조건이 FALSE여야 합니다; 모두 충족 &#91;&#35;Reset; &#40;&#35;SensorStatus &#61; WORD&#35;0&#41;&#93;&#93; [2](#source-2) [8](#source-8) [19](#source-19) [20](#source-20)

실행 허용: &#40;NOT &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;SensorStatus &#61; WORD&#35;0&#41;&#41;&#41;

기록할 식: FALSE

&#35;Alarm&#95;SensorFault; 이 원본 쓰기의 실행 조건: &#40;NOT &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;SensorStatus &#61; WORD&#35;0&#41;&#41;&#41;; NOT &#40;&#40;NOT &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;SensorStatus &#61; WORD&#35;0&#41;&#41;&#41;&#41;이면 이 원본 쓰기는 값을 기록하지 않습니다; 같은 대상에 기록하는 다른 원본 쓰기 수: 1; 최종 태그 값·알람 해제·상태 유지는 미확인입니다. 다른 쓰기와 외부 쓰기, 스캔 실행 및 이전 값을 확인해야 합니다; 실제 실행은 관측하지 않았습니다; 작성 블록: FB&#95;DemoAlarms; 호출 프레임: FB&#95;DemoAlarms [2](#source-2) [8](#source-8)

상태 유지·복귀: not&#95;established; priority&#61;source&#95;order; remanence&#61;

확인(acknowledge)이 해제를 뜻하는지는 해당 값을 바꾸는 코드 연결로 판단합니다.

| 경로 | 값 | 값 의미 | 코드 조건 | 조건 확인 | 원본 |
| --- | --- | --- | --- | --- | --- |
| 발생 값 | TRUE | 센서 상태 이상 알람 발생 | &#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41; | 조건을 만족하는 값 조합 있음 | [쓰기](#cause-W36437bc80df2f485115b) [2](#source-2) [16](#source-16) [20](#source-20) |
| 해제 값 | FALSE | 센서 상태 이상 알람 해제 | &#40;NOT &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;SensorStatus &#61; WORD&#35;0&#41;&#41;&#41; | 조건을 만족하는 값 조합 있음 | [쓰기](#cause-Wf138b1e9a49f7411626d) [2](#source-2) [8](#source-8) [19](#source-19) [20](#source-20) |

**조건·값에 직접 연결된 태그**

[FB&#95;DemoAlarms.SensorStatus](#cause-T0b96a0eac92d5522ccd9), [FB&#95;DemoAlarms.Reset](#cause-T4f3ad56f4900140e4e87)

**추적 끝의 입력·설정·상태 확인점**

| 태그 | 자료형 | 확인할 내용 | 근거 |
| --- | --- | --- | --- |
| [FB&#95;DemoAlarms.SensorStatus](#cause-T0b96a0eac92d5522ccd9) | WORD | 프로그램 입력·실제 값 확인 | [20](#source-20) |
| [FB&#95;DemoAlarms.Reset](#cause-T4f3ad56f4900140e4e87) | BOOL | 프로그램 입력·실제 값 확인 | [19](#source-19) |

알람 발생 시 조건 태그와 위 경계 태그의 값을 같은 시점에 확보해 조건식과 대조하세요. 초기 선언값을 현재 값으로 사용하지 않습니다.

| 리셋·확인 참조 | 분류 근거 | 사용 위치 | 근거 |
| --- | --- | --- | --- |
| FB&#95;DemoAlarms.Reset: reset | 고객 지정 역할 | guard&#61;True; value&#61;False | [2](#source-2) [8](#source-8) [19](#source-19) |

원인 추적 중 확인이 필요한 관계: 

- [FB&#95;DemoAlarms.SensorStatus](#cause-gap-T0b96a0eac92d5522ccd9): external&#95;input
- [FB&#95;DemoAlarms.Reset](#cause-gap-T4f3ad56f4900140e4e87): external&#95;input

### 공통 신호·조건별 알람

| 공통 신호·식 | 연결 알람 | 근거 |
| --- | --- | --- |
| FB&#95;DemoAlarms.Reset | [FB&#95;DemoAlarms.Alarm&#95;HighPressure](#alarm-D1654c82c3ecfe7d13bf4), [FB&#95;DemoAlarms.Alarm&#95;SensorFault](#alarm-D72d96e965f1e013022d4) | [1](#source-1) [2](#source-2) [4](#source-4) [7](#source-7) [8](#source-8) [13](#source-13) [16](#source-16) [19](#source-19) [20](#source-20) [21](#source-21) |

### 공유 원인 관계와 원본 쓰기

연결은 가능한 쓰기 원천입니다. 각 읽기에 실제 도달한 값으로 치환하지 않습니다.

| 태그 | 가능한 쓰기 원천 | 근거 |
| --- | --- | --- |
| <a id="cause-T026b47688a12b5b3665a"></a>FB&#95;DemoAlarms.DriveStart | 프로그램 입력·실제 값 확인 | [23](#source-23) |
| <a id="cause-T0b96a0eac92d5522ccd9"></a>FB&#95;DemoAlarms.SensorStatus | 프로그램 입력·실제 값 확인 | [20](#source-20) |
| <a id="cause-T1d1695ebada9772d1455"></a>FB&#95;DemoAlarms.PressureBar | 프로그램 입력·실제 값 확인 | [4](#source-4) |
| <a id="cause-T4a526346188f40405740"></a>FB&#95;DemoAlarms.PumpRunning | 프로그램 입력·실제 값 확인 | [7](#source-7) |
| <a id="cause-T4f3ad56f4900140e4e87"></a>FB&#95;DemoAlarms.Reset | 프로그램 입력·실제 값 확인 | [19](#source-19) |
| <a id="cause-T722884e3d99af0e855fe"></a>FB&#95;DemoAlarms.DriveReady | 프로그램 입력·실제 값 확인 | [9](#source-9) |
| <a id="cause-T82e96ec094f303ab069e"></a>FB&#95;DemoAlarms.Alarm&#95;SensorFault | [Wf138b1e9a49f7411626d](#cause-Wf138b1e9a49f7411626d), [W36437bc80df2f485115b](#cause-W36437bc80df2f485115b) | [2](#source-2) |
| <a id="cause-Tc5d9a2c1dc8dab33294c"></a>FB&#95;DemoAlarms.Alarm&#95;DriveNotReady | [Wf31788448f8ca318e72b](#cause-Wf31788448f8ca318e72b), [Wd28508dfc9bdcbb287bd](#cause-Wd28508dfc9bdcbb287bd) | [12](#source-12) |
| <a id="cause-Tfa426d69e64e218a819f"></a>FB&#95;DemoAlarms.Alarm&#95;HighPressure | [Wb2cc0217cdf884ce0dfb](#cause-Wb2cc0217cdf884ce0dfb), [W3b68b315dc8ce8b62ae6](#cause-W3b68b315dc8ce8b62ae6) | [21](#source-21) |

| 쓰기·대상 | 실행 조건 | 기록 식·동작 | 원본 순서·호출 | 원본 블록·실행 프레임 | 근거 |
| --- | --- | --- | --- | --- | --- |
| <a id="cause-W36437bc80df2f485115b"></a>W36437bc80df2f485115b<br>FB&#95;DemoAlarms.Alarm&#95;SensorFault | &#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41; | TRUE; assign | scl&#95;source: &#40;0, 70&#41;; FB&#95;DemoAlarms | FB&#95;DemoAlarms → FB&#95;DemoAlarms | [2](#source-2) [16](#source-16) |
| <a id="cause-W3b68b315dc8ce8b62ae6"></a>W3b68b315dc8ce8b62ae6<br>FB&#95;DemoAlarms.Alarm&#95;HighPressure | &#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41; | TRUE; assign | scl&#95;source: &#40;0, 13&#41;; FB&#95;DemoAlarms | FB&#95;DemoAlarms → FB&#95;DemoAlarms | [13](#source-13) [21](#source-21) |
| <a id="cause-Wb2cc0217cdf884ce0dfb"></a>Wb2cc0217cdf884ce0dfb<br>FB&#95;DemoAlarms.Alarm&#95;HighPressure | &#40;NOT &#40;&#40;&#35;PumpRunning AND &#40;&#35;PressureBar &gt;&#61; REAL&#35;8.5&#41;&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;PressureBar &lt; REAL&#35;7.5&#41;&#41;&#41; | FALSE; assign | scl&#95;source: &#40;0, 31&#41;; FB&#95;DemoAlarms | FB&#95;DemoAlarms → FB&#95;DemoAlarms | [1](#source-1) [21](#source-21) |
| <a id="cause-Wd28508dfc9bdcbb287bd"></a>Wd28508dfc9bdcbb287bd<br>FB&#95;DemoAlarms.Alarm&#95;DriveNotReady | &#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41; | TRUE; assign | scl&#95;source: &#40;0, 46&#41;; FB&#95;DemoAlarms | FB&#95;DemoAlarms → FB&#95;DemoAlarms | [10](#source-10) [12](#source-12) |
| <a id="cause-Wf138b1e9a49f7411626d"></a>Wf138b1e9a49f7411626d<br>FB&#95;DemoAlarms.Alarm&#95;SensorFault | &#40;NOT &#40;&#40;&#35;SensorStatus &lt;&gt; WORD&#35;0&#41;&#41; AND &#40;&#35;Reset AND &#40;&#35;SensorStatus &#61; WORD&#35;0&#41;&#41;&#41; | FALSE; assign | scl&#95;source: &#40;0, 88&#41;; FB&#95;DemoAlarms | FB&#95;DemoAlarms → FB&#95;DemoAlarms | [2](#source-2) [8](#source-8) |
| <a id="cause-Wf31788448f8ca318e72b"></a>Wf31788448f8ca318e72b<br>FB&#95;DemoAlarms.Alarm&#95;DriveNotReady | &#40;NOT &#40;&#40;&#35;DriveStart AND NOT &#40;&#35;DriveReady&#41;&#41;&#41; AND &#35;DriveReady&#41; | FALSE; assign | scl&#95;source: &#40;0, 55&#41;; FB&#95;DemoAlarms | FB&#95;DemoAlarms → FB&#95;DemoAlarms | [12](#source-12) [17](#source-17) |

### 원인 추적 한계의 근거

| 관계 | 한계 | 확인 작업 | 추가 자료·지원 | 근거 |
| --- | --- | --- | --- | --- |
| <a id="cause-gap-T026b47688a12b5b3665a"></a>FB&#95;DemoAlarms.DriveStart | external&#95;input: 선언된 입력 신호입니다. 실제 값은 원본 코드에서 확정하지 않습니다. | 운전값·이력 확인 | 호출 인자 연결 또는 해당 시점의 PLC 입력 값 | [23](#source-23) |
| <a id="cause-gap-T0b96a0eac92d5522ccd9"></a>FB&#95;DemoAlarms.SensorStatus | external&#95;input: 선언된 입력 신호입니다. 실제 값은 원본 코드에서 확정하지 않습니다. | 운전값·이력 확인 | 호출 인자 연결 또는 해당 시점의 PLC 입력 값 | [20](#source-20) |
| <a id="cause-gap-T1d1695ebada9772d1455"></a>FB&#95;DemoAlarms.PressureBar | external&#95;input: 선언된 입력 신호입니다. 실제 값은 원본 코드에서 확정하지 않습니다. | 운전값·이력 확인 | 호출 인자 연결 또는 해당 시점의 PLC 입력 값 | [4](#source-4) |
| <a id="cause-gap-T4a526346188f40405740"></a>FB&#95;DemoAlarms.PumpRunning | external&#95;input: 선언된 입력 신호입니다. 실제 값은 원본 코드에서 확정하지 않습니다. | 운전값·이력 확인 | 호출 인자 연결 또는 해당 시점의 PLC 입력 값 | [7](#source-7) |
| <a id="cause-gap-T4f3ad56f4900140e4e87"></a>FB&#95;DemoAlarms.Reset | external&#95;input: 선언된 입력 신호입니다. 실제 값은 원본 코드에서 확정하지 않습니다. | 운전값·이력 확인 | 호출 인자 연결 또는 해당 시점의 PLC 입력 값 | [19](#source-19) |
| <a id="cause-gap-T722884e3d99af0e855fe"></a>FB&#95;DemoAlarms.DriveReady | external&#95;input: 선언된 입력 신호입니다. 실제 값은 원본 코드에서 확정하지 않습니다. | 운전값·이력 확인 | 호출 인자 연결 또는 해당 시점의 PLC 입력 값 | [9](#source-9) |
| <a id="cause-gap-T82e96ec094f303ab069e"></a>FB&#95;DemoAlarms.Alarm&#95;SensorFault | multiple&#95;source&#95;writers: 여러 쓰기 경로가 있습니다. 원본 순서는 쓰기 기록에 남기며, 이 읽기에 도달한 값이나 스캔 순서를 확정하지 않습니다. |  |  | [2](#source-2) [8](#source-8) [16](#source-16) |
| <a id="cause-gap-Tc5d9a2c1dc8dab33294c"></a>FB&#95;DemoAlarms.Alarm&#95;DriveNotReady | multiple&#95;source&#95;writers: 여러 쓰기 경로가 있습니다. 원본 순서는 쓰기 기록에 남기며, 이 읽기에 도달한 값이나 스캔 순서를 확정하지 않습니다. |  |  | [10](#source-10) [12](#source-12) [17](#source-17) |
| <a id="cause-gap-Tfa426d69e64e218a819f"></a>FB&#95;DemoAlarms.Alarm&#95;HighPressure | multiple&#95;source&#95;writers: 여러 쓰기 경로가 있습니다. 원본 순서는 쓰기 기록에 남기며, 이 읽기에 도달한 값이나 스캔 순서를 확정하지 않습니다. |  |  | [1](#source-1) [13](#source-13) [21](#source-21) |


<a id="sources"></a>

## 원본 근거 부록

분석기 버전: 0.4.26

<details>
<summary>판본과 원본 파일 해시</summary>

| 코드 사실 | 내용 | 근거 |
| --- | --- | --- |
| 프로그램 판본 | 371b1ed86b5709c88f88bec03e659605c10051e18beca35d23f371f0730353e9 |  |
| 원본 ZIP 해시 | 2a056d970d2b2b3dab323280cdc7b752b5fd747c7df3a271733023bfec74ebc4 |  |
| 분석 데이터 해시 | 935765a03ab4fa8be13ac59d0343341e713362cedcf397e3dbb127e554c84ea1 |  |
| 컨트롤러 | unknown |  |

| 원본 파일 | SHA-256 |
| --- | --- |
| src/FB&#95;DemoAlarms.scl | d0134c5abd93feae145f1cc1a779ce0ab74a70b1aa47b118a1149006061a477e |

</details>

<details>
<summary>모든 인용의 원본 위치</summary>

| 근거 | 파일 | 원본 위치 |
| --- | --- | --- |
| <a id="source-1"></a>1 | src/FB&#95;DemoAlarms.scl | line&#61;22 |
| <a id="source-2"></a>2 | src/FB&#95;DemoAlarms.scl | line&#61;15 |
| <a id="source-3"></a>3 | src/FB&#95;DemoAlarms.scl | line&#61;3 |
| <a id="source-4"></a>4 | src/FB&#95;DemoAlarms.scl | line&#61;6 |
| <a id="source-5"></a>5 | src/FB&#95;DemoAlarms.scl | line&#61;34 |
| <a id="source-6"></a>6 | src/FB&#95;DemoAlarms.scl | line&#61;36 |
| <a id="source-7"></a>7 | src/FB&#95;DemoAlarms.scl | line&#61;5 |
| <a id="source-8"></a>8 | src/FB&#95;DemoAlarms.scl | line&#61;36 |
| <a id="source-9"></a>9 | src/FB&#95;DemoAlarms.scl | line&#61;9 |
| <a id="source-10"></a>10 | src/FB&#95;DemoAlarms.scl | line&#61;27 |
| <a id="source-11"></a>11 | src/FB&#95;DemoAlarms.scl | line&#61;3 |
| <a id="source-12"></a>12 | src/FB&#95;DemoAlarms.scl | line&#61;14 |
| <a id="source-13"></a>13 | src/FB&#95;DemoAlarms.scl | line&#61;20 |
| <a id="source-14"></a>14 | src/FB&#95;DemoAlarms.scl | line&#61;22 |
| <a id="source-15"></a>15 | src/FB&#95;DemoAlarms.scl | line&#61;27 |
| <a id="source-16"></a>16 | src/FB&#95;DemoAlarms.scl | line&#61;34 |
| <a id="source-17"></a>17 | src/FB&#95;DemoAlarms.scl | line&#61;29 |
| <a id="source-18"></a>18 | src/FB&#95;DemoAlarms.scl | line&#61;29 |
| <a id="source-19"></a>19 | src/FB&#95;DemoAlarms.scl | line&#61;7 |
| <a id="source-20"></a>20 | src/FB&#95;DemoAlarms.scl | line&#61;10 |
| <a id="source-21"></a>21 | src/FB&#95;DemoAlarms.scl | line&#61;13 |
| <a id="source-22"></a>22 | src/FB&#95;DemoAlarms.scl | line&#61;20 |
| <a id="source-23"></a>23 | src/FB&#95;DemoAlarms.scl | line&#61;8 |

</details>

