발생 기록
시험 대상에서 지켜보는 조건이며, 모델의 채널 위에 JavaScript 식으로 적고 실행 중에 또는 언제나 판정합니다.
발생 기록은 시험 대상이 눈여겨볼 만한 일을 했다는 것을 남깁니다. 경보가 설비와 장비를 지켜본다면, 발생 기록은 절차에 속합니다. 그 변하는 순간은 그것을 관측한 실행과 함께 남고, 이벤트 페이지의 보관되는 발생 기록 시간선에도 들어갑니다. 조건은 모델의 채널 위에 적은 JavaScript 식이며, 양쪽 변화 지점에서 디바운스되고 읽는 값의 품질이 문을 지킵니다. 발생 기록은 Process > 모델 > 모델 > 셋업 > 발생 기록 아래에 살며 레시피와 판정 편집 권한이 필요합니다.
발생 기록 폴더
발생 기록 줄을 고르면 폴더 페이지가 열립니다("시험 대상에서 지켜보는 조건입니다. 변하는 순간은 해당될 때 실행 기록과 함께 남고, 아울러 보관되는 발생 기록 이력에도 들어갑니다."). 발생 기록마다 이름을 단 카드 하나이며, 카드를 누르면 열리고 가위표는 없앱니다. 하나도 없으면 페이지는 "아직 발생 기록이 없습니다. 하나 추가하십시오."라고 말합니다.
| 명령 | 하는 일 | 언제 흐려지는가(상황) | 언제 그려지지 않는가(역할) |
|---|---|---|---|
| 발생 기록(폴더를 고른 상태의 상세 막대, 오른쪽 클릭 발생 기록 추가) | Occurrence <n>을 더합니다. 심각도 경고, 절차가 도는 동안 감시, 사용, 메시지 없음, 빈 조건입니다. 그리고 그것을 고릅니다. |
어느 유닛이든 실행을 지니고 있을 때, 또는 런타임이 정지했을 때. | 레시피와 판정 편집이 없을 때. |
발생 기록의 페이지
머리글은 이름과, 심각도를 그 심각도 자신의 색으로 담은 필을 답니다. 발생 기록이 꺼져 있으면 사용 안 함 필도 답니다. 그 아래에는 알림 두 갈래가 설 수 있습니다.
- 저장된 조건이 확인을 통과하지 못했을 때의 주의 메모입니다(초안은 그래도 저장되며, 메모가 무엇이 잘못되었는지 말합니다. 아래 참고).
- 실시간 조건을 판정하지 못한 유닛마다 판정을 쓸 수 없음 알림 띠 하나이며, "
<unit>:<error>" 꼴입니다. 유닛의 진단은 같은 오류가 이어지는 동안 한 번만 적히고, 판정이 다시 성공하면 지워집니다.
식별과 동작
| 항목 | 무엇인가 | 값 / 기본값 | 효과 |
|---|---|---|---|
| 이름 | 발생 기록의 이름입니다. 트리 줄, 실행 파일의 이벤트 이름표, 이벤트 시간선, 보고서에 쓰입니다. | 자유 입력이며 만들 때는 Occurrence <n>입니다. |
그 줄과, 절차의 목록이 그것을 부르는 이름을 바꿉니다. |
| 심각도 | 발생 하나의 무게입니다. 고르개는 선택지마다 그 필이 입을 색으로 보여 줍니다. | 정보, 경고(기본값), 심각입니다. | 그것이 나열되는 모든 곳에서 필과 발생 구간에 색을 입힙니다. 실행 중에 경고나 심각 발생 기록이 발생하면, 앱이 숨겨져 있거나 최소화된 동안 운영체제 알림도 요청합니다. 정보는 창 안에 머뭅니다. |
| 감시 시점 | 조건을 언제 판정하는지입니다. | 절차가 도는 동안(기본값): 그것을 감시하는 절차의 실행이 도는 동안에만, 기록된 줄 위에서 판정합니다. 항상: 실행 밖에서도, 유닛의 바인딩을 실시간으로 읽는 배경 감시기가 판정합니다. | 항상인 발생 기록은 감시를 걸어 줄 절차가 필요 없습니다. 절차가 도는 동안인 것은 그것을 체크한 절차만 판정합니다. |
| 발생 지연(ms) | Activated를 확정하기 전에 조건이 참으로 얼마나 오래 있어야 하는지이며, 표본의 해상도를 따릅니다. | 밀리초 수이며 기본은 0입니다. 이 칸은 음수를 받지 않습니다. 입력은 거부되고, 칸 아래의 메모가 그것을 말하며, 이전 값이 돌아옵니다. | 올라가는 변화 지점을 디바운스합니다. |
| 복귀 지연(ms) | Cleared를 확정하기 전에 조건이 거짓으로 얼마나 오래 있어야 하는지입니다. | 같으며 기본은 0입니다. | 내려가는 변화 지점을 디바운스합니다. |
| 사용 | 발생 기록이 아예 감시에 들어가는지입니다. | 기본은 켜짐입니다. | 사용하지 않는 발생 기록은 실행 안에서도 밖에서도 결코 감시에 들어가지 않고, 시작을 결코 막지 않습니다. |
| 메시지 | 발생과 함께 기록되고 알려지는 글입니다. | 자유 입력이며 기본은 비어 있습니다. | 모든 변하는 순간과 함께 실행 파일과 기록부로 갑니다. |
조건
"Bool을 돌려주는 JavaScript 식 하나입니다." 카드는 코드 편집기, 쓸 수 있는 참조 목록("쓸 수 있는 채널 참조: Channels.Ch_1, Channels.Outlet_temperature, …"), 그리고 일러 주는 말을 담습니다. "실행 중에는 조건이 기록된 데이터로그 열을 읽고, 항상 도는 감시기는 유닛 바인딩을 실시간으로 읽습니다. 문법 오류, 없는 참조, 판정 중에 난 실패는 여기에 그대로 보이며, 거짓이나 신호 없음으로 다루지 않습니다."
채널은 Channels.<identifier>로 참조하며, 식별자는 채널의 이름을 정리한 것입니다. 문자와 숫자는 남고, 그 밖의 문자는 모두 _가 되며, 숫자로 시작하는 이름은 앞에 _를 얻습니다. Channels는 모델의 채널만 담고 그 밖의 것은 담지 않으므로, Math나 isNaN이나 true라는 이름의 채널도 그대로 쓸 수 있는 채널 이름이며 어떤 JavaScript 전역도 가리지 않습니다. 값이 있고 품질이 좋은 NaN은 isNaN(Channels.Pv)로 시험할 수 있는 데이터입니다. 예를 들면 Channels.Outlet_temperature > 80, Channels.Door_open && Channels.Heater_on입니다.
초안은 입력하는 대로, 채널 형식마다의 예시 값에 대해 확인되며, 머리글 아래의 주의 메모가 무엇이 실패했는지 말합니다.
| 메모 | 뜻 |
|---|---|
| "문법 오류: …" | 식이 해석되지 않습니다. |
| "채널 참조 'Channels.X'가 이 모델에 없습니다." | 참조가 어떤 채널도 가리키지 않습니다. |
| "'Channels.X'로 이어지는 채널이 하나가 아닙니다." | 채널 이름 둘이 같은 식별자로 정리됩니다. 채널 표에서 하나의 이름을 바꾸십시오. |
"조건은 Bool을 돌려주어야 하는데 <type>을(를) 돌려주었습니다." |
식이 참도 거짓도 아닌 것을 냅니다. |
| "판정 오류: …" | 식이 예외를 던집니다. |
올바르지 않은 조건도 초안으로는 저장됩니다. 다만 다른 곳에 결과가 따릅니다. 사용 중인데 확인을 통과하지 못한 발생 기록이 절차의 감시에 들어가 있으면(그 절차에서 체크되었거나 항상으로 감시하면) 그 절차의 시작이 막히고, 절차의 페이지가 "발생 기록 '<name>'이(가) 올바르지 않습니다: …"라고 보여 줍니다. 항상인데 올바르지 않은 발생 기록은 실행 밖 감시기를 시작하지 않고, 읽을 때마다 되풀이하는 대신 여기에 눈에 보이는 진단 하나를 남깁니다.
판정은 저마다 제한된 엔진에서 돕니다(500밀리초 한계, 정해진 문장 수, 정해진 메모리). 그래서 폭주하는 식은 스테이션이 아니라 자기 판정만 실패합니다.
발생 기록을 판정하는 방식
실행 중에는 데이터로그가 기록하는 줄 위에서 조건을 판정하므로, 절차의 데이터로그가 기록하지 않는 채널은 조건이 쓸 수 없습니다. 그런 채널 위에서 발생 기록을 감시하는 절차, 또는 발생 기록을 감시하면서 아무것도 기록하지 않는 절차는 자기 페이지에서도 시작에서도 거부됩니다. 그 발생 기록은 결코 판정되지 못할 것이고, 주의 메모가 그 이름을 부릅니다. 실행 밖에서는 항상인 발생 기록을 유닛의 바인딩을 실시간으로 읽는 감시기가 판정합니다. 어느 쪽 판정기든 참조하는 채널 가운데 하나라도 쓸 수 없는 동안에는 마지막으로 확정한 상태를 그대로 지닙니다. 판정을 멈추게 하는 것은 값이 없거나 품질이 나쁜 경우뿐이고, 값이 있고 품질이 좋으면(NaN도 포함해) 판정할 수 있는 데이터입니다. 판정기는 상태 전이 넷을 기록합니다. Activated(발생 지연 뒤), Cleared(복귀 지연 뒤), Unavailable(참조하는 채널이 신호를 잃음), Restored(참조하는 채널이 모두 돌아옴. 조건을 다시 판정하고 해당하는 지연이 처음부터 다시 셉니다)입니다.
실행 중에는 모든 상태 전이가 먼저 실행 파일에 쓰이고, 그다음 실행 맥락과 함께 이벤트 페이지의 보관되는 기록부로 복사됩니다. 실행 밖에서는 감시기가 기록부에만 씁니다. 실행을 시작하면 유닛의 실행 밖 판정기를 버리고, 실행을 떠나면 새 판정기를 만듭니다. 그래서 관측하지 않은 경계를 넘어 발생이 이어지는 일이 없습니다. 이름과 메시지와 심각도를 고치면 그 뒤의 변하는 순간에만 영향을 주고, 조건과 지연과 감시 시점과 사용 여부를 고치면 새 관측이 시작됩니다.
발생 구간(발생에서 복귀까지이며, 신호를 잃은 구간은 따로 셉니다)은 그 변하는 순간들에서 도출하며, 애플리케이션이 그것을 보여 주는 모든 곳에서 그렇습니다. 패널의 발생 기록 카드, 이벤트 페이지, 이력, 보고서입니다. 발생 구간의 진행 시간은 저장된 두 변하는 순간 사이의 간격 그대로이므로, 발생 지연은 빠지고 복귀 지연은 들어갑니다. 시계는 조건이 이미 발생 지연만큼 유지된 뒤에 시작하고, 복귀 지연이 지나 복귀가 쓰인 뒤에야 멈춥니다. 보고서가 제삼자에게 건네는 숫자가 바로 그것입니다.
발생 기록을 어디에서 쓰는가
절차의 페이지에는 이 절차가 도는 동안 감시하는 발생 기록 카드가 있으며, "<n>개 감시" 필과 모델의 발생 기록마다 이름을 단 체크 상자 하나가 놓입니다. 체크하면 그 절차의 실행 동안 감시에 들어갑니다. 항상으로 감시하는 발생 기록은 무엇을 하든 지켜보며 체크가 필요 없습니다. 모델에 발생 기록이 하나도 없으면 카드는 "아직 이 모델에 발생 기록이 없습니다. 모델의 발생 기록에서 몇 개 추가하십시오."라고 말합니다. 절차를 보십시오.
채널의 이름을 바꾸면 모델의 모든 조건에서 그 채널의 Channels.<identifier> 참조가 다시 쓰입니다. 문자열이나 주석이나, 다른 객체에 있는 같은 이름의 속성은 건드리지 않습니다.
발생 기록 제거
발생 기록 제거는 발생 기록을 고른 상태의 상세 막대 위험 묶음, 그 오른쪽 클릭 메뉴, 그리고 폴더 페이지 카드의 가위표에 섭니다. 먼저 묻고("발생 기록 삭제", "모델에서 발생 기록을 지웁니다.") 그것을 체크했던 모든 절차에서 감시를 풉니다. 레시피와 판정 편집이 필요하며 엔지니어링 잠금과 정지한 런타임 아래에서는 흐려집니다.
발생 기록이 하지 않는 것
- 경보가 아닙니다. 확인하지 않고, 우선순위가 없으며, 태그를 지켜보지 않습니다. 설비의 경보는 Logic 페이지에 있습니다.
- 아무것도 쏘지 않습니다. 발생은 기록되고 알려질 뿐, 어떤 액션도 라벨도 보고서도 거기에 붙지 않습니다.
- 모델의 채널 말고는 아무것도 읽을 수 없습니다. 태그도, 변수도, 다른 모델도 읽지 않습니다.
- 유닛마다 다르게 판정하지 않습니다. 하나의 조건이 모든 유닛에, 그 유닛 자신의 바인딩이나 기록된 줄 위에서 쓰입니다.