# 교정

> 태그의 교정 단계, 2점 도우미의 단계별 진행, 적용이 하는 일과 거부하는 경우, 그리고 태그 교정 권한만으로 할 수 있는 일.

**교정**은 숫자 태그가 지나는 [값 변환 경로](connector-value-pipeline)의 두 번째 선형 단계입니다. `calibrated = scaled × Angular + Linear`이며, 스케일링 뒤에, 잘못된 읽기와 한계와 소수 자리 앞에 적용됩니다. 기준기에 견주어 얻은 교정 전과 교정 후의 보정을 스케일링의 범위 계산을 건드리지 않고 기록할 수 있게 하려고 존재하며, **태그 교정** 권한을 가진 역할이 **Connector 구성** 없이 편집할 수 있는 유일한 단계입니다. 스케일링 단계와 교정 단계 모두 기준점 둘로 짝을 계산하는 **2점 보정** 도우미를 가지고 있습니다.

## 단계 {#the-stage}

[태그](connector-tags#the-conversion-card) 페이지의 변환 카드에서 이 단계는 **교정**이라는 이름과 함께 확인란(기본값은 꺼짐), **기울기(×)**(기본값 1), **절편(+)**(기본값 0), 머리에 있는 **2점 보정** 단추, 그리고 오른쪽의 진행 결과를 보여 줍니다. 단계가 적용되는 동안에는 `= value`, 건너뛰는 동안에는 `→ value`입니다. 장치 표는 같은 짝을 **교정 ×**와 **교정 +**로, 결과를 **교정 후**로 보여 주며 Connector 구성에게만 편집할 수 있습니다.

기울기 0은 입력하는 그 자리에서 거부됩니다. "교정 계수를 0으로 두면 모든 읽은 값이 0이 됩니다. 곱할 계수를 입력하십시오(1은 값을 그대로 둡니다)."

### 단계 편집이 저장되는 방식 {#how-a-stage-edit-is-saved}

스케일링과 교정의 편집은 장치의 지연 자동 저장을 타지 않습니다. 확인란이든 어느 칸이든, 확정할 때마다 곧바로 그리고 그 단계에만 한정해서 기록됩니다. 그 태그의 그 단계만 저장된 장치 위에 복사되므로, 교정 권한만으로 한 편집이 저장 대기 중인 구성 초안을 함께 데려가는 일이 없고, 동시에 도는 장치 전체 자동 저장이 그 보정을 덮어쓰는 일도 없습니다. 거부되거나 실패한 확정은 그 단계를 데이터베이스에서 다시 읽어 오므로, 거절된 값이 페이지에 남아 있지 않습니다. 이유는 작업 기록 줄에 나타납니다("변환 단계 편집을 저장하지 못했습니다: …").

### 어느 역할이 어느 단계를 편집할 수 있는지 {#who-may-edit-which-stage}

| 단계 | 직접 입력 칸과 확인란 | 2점 적용 | 거부될 때의 메시지 |
| --- | --- | --- | --- |
| **스케일링** | Connector 구성 | Connector 구성 | "스케일링 단계를 편집하려면 'Connector 구성' 권한이 필요합니다." / "스케일링 보정을 적용하려면 'Connector 구성' 권한이 필요합니다." |
| **교정** | 태그 교정 또는 Connector 구성 | 태그 교정 또는 Connector 구성 | "교정 단계를 편집하려면 '태그 교정' 또는 'Connector 구성' 권한이 필요합니다." / "교정 보정을 적용하려면 '태그 교정' 또는 'Connector 구성' 권한이 필요합니다." |

권한과 별개로, 두 단계는 실행이 스테이션을 잡고 있는 동안("이 단계를 편집하기 전에 진행 중인 Process 조작을 끝내십시오." / "이 보정을 적용하기 전에 진행 중인 Process 조작을 끝내십시오.")과 런타임이 정지된 동안("런타임 정지") 거부합니다. 권한은 칸이 그려질 때만이 아니라 편집을 확정할 때 다시 읽힙니다.

## 2점 도우미 {#the-two-point-assistant}

단계의 머리에서 **2점 보정**을 누르면 도우미가 그 단계 아래에 **2점 보정**으로 펼쳐집니다. 열려 있는 동안에는 결코 태그를 편집하지 않으며, 보정 적용을 누르기 전까지 아무것도 바뀌지 않습니다. 첫 줄은 캡처가 무엇을 읽는지 말합니다. "잡은 값은 교정, 한계, 소수 자릿수 앞의 현재 스케일링 출력입니다." 또는 "잡은 값은 한계와 소수 자릿수 앞의 현재 교정 출력입니다." 그 단계를 결코 적용할 수 없는 역할에게는 단추가 그려지지 않습니다.

### 1단계: 기준점 둘 {#step-1-two-reference-points}

**1번 점**과 **2번 점**이라는 두 묶음이 있고, 각각 **기대값**(이 기준점에서 단계가 내놓아야 할 값)과 **읽은 값**(오늘 그 자리에서 단계가 내놓는 값)을 가집니다. 둘 다 유한한 숫자로 입력해야 하며, 그렇지 않으면 "유한한 숫자를 입력하십시오."로 표시됩니다. 작업하는 동안 비워 두는 것은 괜찮습니다. 순서는 상관없지만, 두 기댓값은 서로 달라야 하고 두 읽은 값은 구별할 수 있어야 합니다.

### 2단계: 읽은 값을 캡처하거나 입력하기 {#step-2-capture-or-type-the-reading}

**값 잡기**는 지금 이 순간의 단계 출력을 그 지점의 읽은 값에 채우고 시각을 찍습니다("14:02:33에 캡처함"). 그 뒤에는 **다시 잡기**로 읽힙니다. 가장 최근 읽기의 통신 품질이 정상이 아니거나("통신이 정상인 실시간 읽은 값이 필요합니다.") 단계에 유한한 값이 없으면("선택한 변환 단계에 유한한 실시간 값이 없습니다.") 캡처가 거부됩니다. 읽은 값을 손으로 입력하면 그 지점의 캡처 시각이 지워집니다.

두 읽은 값은 그것을 얻은 순간의 단계 계수에 묶여 있습니다. 그 계수가 그사이에 바뀌면(누군가 칸을 편집했거나 다른 창이 보정을 적용했다면), 다음 캡처나 손으로 입력한 값이 새 짝을 시작합니다. 다른 지점의 읽은 값과 두 시각이 지워지고, 초안은 "첫 읽기 뒤에 변환 단계 설정이 바뀌었습니다. 두 읽은 값을 다시 잡거나 입력하십시오."라고 알립니다.

### 3단계: 판정과 미리 보기 읽기 {#step-3-read-the-verdict-and-the-preview}

네 값이 모두 있으면 도우미는 태그의 일회용 복사본 위에서 초안을 평가하므로, 미리 보기가 실제 계산을 그대로 돌립니다. 안전한 보정이 될 수 없는 초안은 지점 옆에서 그 이유를 말합니다.

| 메시지 | 원인 |
| --- | --- |
| 두 지점의 기댓값과 읽은 값을 입력하십시오. | 칸 하나가 비어 있습니다. |
| 2점 보정은 숫자 태그에만 됩니다. | 태그가 숫자가 아닙니다. |
| 모든 지점 값은 유한한 숫자여야 합니다. | 값이 무한대이거나 숫자가 아닙니다. |
| 기댓값은 서로 달라야 합니다. | 기댓값이 같으면 직선이 정해지지 않습니다. |
| 읽은 값이 같거나, 안전하게 구별하기에 너무 가깝습니다. | 두 읽기의 차이가 부동소수점 여덟 걸음 이하입니다. |
| 두 지점의 차이가 너무 커서 안전하게 계산할 수 없습니다. | 지점을 빼는 과정에서 넘침이 일어났습니다. |
| 선택한 단계의 현재 계수가 올바르지 않습니다. | 단계의 현재 기울기나 절편이 유한하지 않습니다. |
| 지점 보정이 지원 범위를 벗어나는 계수를 만듭니다. | 보정 자체가 유한하지 않습니다. |
| 보정을 현재 단계와 합치면 지원 범위를 넘습니다. | 합친 짝이 유한하지 않습니다. |
| 결과 단계를 안전하게 역산할 수 없습니다. | 합친 기울기가 0이거나 나누기에 너무 작아 쓰기가 불가능해집니다. |
| 후보를 태그 변환 경로로 평가할 수 없었습니다. | 미리 보기가 유한한 값을 내놓지 못했습니다. |

올바른 초안은 **보정 미리 보기** 표를 보여 줍니다. 기준점마다 한 행, 그리고 **실시간** 읽기에 한 행이 있으며, **보정 전**의 단계 출력, **보정 후**의 값, **기대값**, 그리고 스케일링에만 있는 **최종**(뒤의 모든 단계를 거친 값)이 나옵니다. 태그에 읽기가 없으면 실시간 행에는 대시가 나옵니다. 표의 모든 숫자는 변환 카드가 단계를 적는 방식 그대로 스테이션의 숫자 형식([언어와 형식](settings-localization))으로 적습니다. 값이 가진 자릿수를 최대 여섯 자리까지 보여 주고, Float 태그에서는 float가 담고 있는 값을 보여 줍니다(239.050003이 아니라 239.05). 잡은 읽은 값은 같은 자릿수로, 자릿수 묶음 기호 없이 읽은 값 칸에 들어가므로 칸은 보여 주는 숫자를 그대로 다시 읽습니다.

도우미가 계산하는 것은 이렇습니다. 기울기 `(Expected2 − Expected1) ÷ (Read2 − Read1)`와 오프셋 `Expected1 − slope × Read1`을 가진 보정을 단계의 현재 출력 위에 얹고, 그것을 단계의 현재 짝과 합쳐 그 자리를 대신할 후보 기울기와 절편을 만듭니다. 이때 꺼져 있는 단계는 항등 짝 (1, 0)으로 셈하며, 적용은 그 단계를 켭니다.

### 4단계: 적용하거나 취소하기 {#step-4-apply-or-cancel}

**보정 적용**은 모든 칸이 올바르고, 캡처 오류가 없고, 미리 보기가 올바르고, 역할과 스테이션이 허락할 때만 쓸 수 있습니다. 그렇지 않으면 그 이유가 단추 위에 적힙니다. 누르면 후보 짝이 그 단계에만 기록되고, 단계가 켜지며, "'Temperature'에 교정 2점 보정을 적용했습니다."(또는 "스케일링 …")라고 알린 뒤 도우미가 닫힙니다. 미리 보기 뒤에 단계가 바뀌었을 때("미리 보기 뒤에 변환 단계 설정이 바뀌었습니다. 두 점을 다시 확인하고 시도하십시오. 아무것도 적용하지 않았습니다."), 이 초안 밖에서 저장된 장치가 바뀌었을 때("저장된 변환 단계 설정이 이 편집 밖에서 바뀌었습니다. 다시 불러온 다음 시도하십시오. 아무것도 적용하지 않았습니다."), 태그나 그 장치가 더는 없을 때, 또는 스테이션이 변경을 거부할 때는 초안을 열어 둔 채 거부합니다. 진행 중에는 "적용하는 중…"이 보이고, 모든 거부는 "적용된 것은 없습니다"라고 말하며 이전 계수가 그대로 남습니다.

**취소**는 도우미를 닫고 초안을 버립니다. 다른 태그를 선택해도 닫힙니다. 초안은 그 도우미가 열려 있는 동안에만 존재합니다.

## 태그 교정만으로 할 수 있는 일 {#what-calibrate-tags-allows-on-its-own}

태그 교정은 있고 Connector 구성은 없는 역할은 Connector 전체를 읽기 전용으로 보되, 교정을 위해 뚫린 구멍 하나를 가집니다.

- 태그 페이지에서 교정 단계의 확인란, 기울기와 절편, 그리고 적용이 있는 2점 도우미가 살아 있습니다. 그 밖의 모든 칸은 작동하지 않으며, 일반 카드 위에 "Connector를 바꾸려면 'Connector 구성' 권한이 필요합니다."라는 안내가 붙고, 스케일링 칸은 스케일링 메시지를 도구 설명으로 답니다.
- 장치 표의 교정 ×와 교정 + 셀은 이 역할에게 편집할 수 없습니다. 교정은 태그 페이지를 거칩니다.
- 만들기, 사용, 사용 안 함, 삭제, 쓰기, 장치 검색, 바꾸기 동사는 하나도 그려지지 않습니다.

태그 교정은 Connector 구성의 부분집합입니다. Connector 구성을 가진 역할은 여기의 모든 것을 가집니다. 권한 목록은 [권한](users-permissions)에 있습니다.
