# 입력란

> 운전자가 포인트에 쓰는 값 입력입니다. 상자는 포인트가 받는 것을 받고, 나머지는 이유와 함께 물리칩니다.

**입력란**은 운전자의 입력 칸입니다. 운전자가 주인인 초안과, 그것을 스테이션의 단일 쓰기 통로를 거쳐 포인트로 보내는 **쓰기** 키입니다. 자기 읽은 값은 그리지 않습니다. 상자 옆에 포인트의 값을 두고 싶으면 그 옆에 [값 표시](component-value)를 짜 놓고, 칸에 이름을 붙이는 일은 [텍스트](component-label)의 몫입니다. *조작* 구성 요소이며, 새로 만들면 4 × 1 칸을 차지합니다.

초안은 운전자의 것입니다. 실시간 새로 고침이 적어 놓은 것을 결코 덮어쓰지 않고, 물리친 입력은 상자에 그대로 남으므로 고치는 일이 다시 적는 일이 아니라 손보는 일이 됩니다.

## 데이터 {#data}

| 항목 | 하는 일 | 값 | 기본값 |
|---|---|---|---|
| 주소 | 쓰이는 포인트의 뿌리 있는 Logic 주소입니다. 내부 값 변수, 쓸 수 있는 태그, 유닛의 준비 항목(`Next.<field>`), 또는 실행 코멘트 포인트(`Commands.Comment`)입니다. 여기에서 걸러 내는 것은 없습니다. 그다음 상자가 무엇을 받는지는 포인트 자체에서 읽습니다. | 자유 입력, 제안은 살아 있는 포인트 목록에서 | 비어 있음 |

주소 아래에서 패널은 그 칸이 지금 무엇을 받는지 적습니다("이 칸이 받는 값: 숫자, 0에서 100까지, 소수점 이하 1자리"). 그래서 두 상태 포인트가 그 줄을 상태마다 키 하나로 바꾼다는 것을 화면이 돌기 전에 볼 수 있습니다.

## 상자가 받는 것 {#what-the-box-takes}

입력의 갈래는 **포인트에서 이끌어 낸 것**이지 그 옆에서 고르는 것이 아닙니다. 포인트에 맞세워 적어 넣는 갈래는 두 번째 선언이 되어 포인트가 이미 하고 있는 선언과 어긋날 수 있기 때문입니다.

| 포인트 | 상자 | 행동 |
|---|---|---|
| 부울 포인트 | 상자 대신 상태마다 키 하나(**켜짐** / **꺼짐**) | 한 번 누르는 것이 지시의 전부입니다. 키는 절대값을 담으므로 품질이 나빠도 쓸 수 있습니다. 뒤집을 읽은 값을 알아야 하는 [토글](component-toggle)과는 다릅니다. 어느 키도 포인트의 상태를 보여 주지 않습니다. |
| 정수 포인트 | 정수 상자 | 소수 입력은 물리칩니다. 터치 키보드는 숫자만 내놓습니다. 스케일링이나 교정이 값을 바꾸는 정수 태그는 소수를 받습니다. 공학값이 실수이기 때문입니다. |
| 실수(소수) 포인트 | 숫자 상자 | **쓰기**를 누를 때 범위와 선언한 자릿수에 맞춰 판단하며, 키를 누를 때마다 판단하지는 않습니다. 터치 키보드는 소수 자판을 내놓습니다. |
| 글, 시각, 준비 항목이나 코멘트 포인트, 또는 아직 아무것도 답하지 않는 주소 | 자유 입력 상자 | 범위와 소수 자릿수는 읽지 않으며, 패널이 그렇게 말합니다. |

## 숫자 {#number}

포인트 *위에* 운전자가 얹는 범위와 정밀도입니다.

| 항목 | 하는 일 | 값 | 기본값 |
|---|---|---|---|
| 최소 | 이 칸이 보내는 가장 낮은 숫자입니다. 비우면 그쪽을 열어 둡니다. | 아무 숫자, 또는 비움 | 비움 |
| 최대 | 이 칸이 보내는 가장 높은 숫자입니다. 비우면 그쪽을 열어 둡니다. 최소가 최대보다 크면 그 사이에 숫자가 없고, 이 칸이 모든 입력을 물리치게 된다고 패널이 알립니다. | 아무 숫자, 또는 비움 | 비움 |
| 소수 자릿수 | 이 칸이 얼마나 촘촘한 값을 보내는지입니다. 비우면 적은 그대로의 정밀도를 보냅니다. 세는 포인트는 저장된 것이 무엇이든 0으로 고정합니다. 자릿수는 자리 수가 아니라 값에 대해 묻습니다. `12.500`은 `12.5`이므로 키패드가 붙인 끝의 0이 물리치는 일은 없습니다. | 0에서 15, 또는 비움 | 비움 |

자기 한계를 선언한 태그는(그 **한계** 변환 단계를 켠 태그) 여기에 적은 것을 더 좁힙니다. 이 칸은 값 변환 경로가 그대로 통과시킬 값만 받습니다.

범위 밖이거나 너무 촘촘하거나 아예 숫자가 아닌 입력은 **이유와 함께 물리치고 아무것도 쓰지 않습니다**. 숫자는 설비에 내리는 지시이고, 끝값으로 바꿔 받는다면 스테이션이 운전자를 대신해 정하는 셈이기 때문입니다. 범위를 벗어난 입력을 가까운 경계에서 받아들이고 그렇게 말하는 편집기 자신의 설정 입력란과는 일부러 반대로 만든 것입니다.

## 쓰기의 뜻 {#write-semantics}

- **내부 값 변수**: 초안을 그 변수가 내보내는 갈래에 맞춰 확인한 다음 로직 통로를 거쳐 씁니다. 빈 상자는 빈 값을 씁니다.
- **쓸 수 있는 태그**: 초안은 공학값 그대로 통로에 넘어가며, 먼저 태그의 노드 형식으로 맞추지 않습니다. 통로가 회선으로 보내는 길에 교정과 스케일링을 되돌려 계산합니다(태그의 변환 경로를 거꾸로 지납니다). 그래서 스케일링 0.1인 Int16 태그에 0.5를 쓰면 장비에는 5가 갑니다. 되돌려 계산한 뒤 노드 형식에 담기지 않는 값(부호 없는 형식에 음수, 형식의 최댓값을 넘는 수)은 그 형식의 범위와 함께 거부되고, 아무것도 쓰지 않습니다.
- **`Next.<field>`**: 다음 실행을 위해 그 글을 유닛의 준비 자리에 담습니다. 준비는 설비에 쓰는 일이 아니므로 통로도 진단 로그 기록도 없습니다. 응답 줄은 "준비됨"이라고 말합니다.
- **`Commands.Comment`**: 유닛의 지금 문맥에 실행 코멘트(또는 대기 중이면 실행 뒤 메모)를 덧붙이고 로그인한 운전자의 것으로 적습니다. 상자는 비워지고 응답 줄은 "코멘트를 더했습니다"라고 말합니다. 빈 코멘트는 물리칩니다.

잠깐 나오는 응답 줄이 모든 결과를 알리고 몇 초 뒤에 사라집니다. 권한은 누르는 순간에 다시 확인합니다. 응답 줄이 들어갈 자리가 없고 조작 요소 위에 모서리 제목도 서 있지 않은 칸에서는, 응답이 보이는 동안 응답이 **쓰기** 키의 글자 자리를 차지하며(두 상태 포인트에서는 누른 키의 글자 자리), 거부는 오류 색으로 나옵니다. 키는 너비를 지키므로 담지 못하는 부분은 말줄임표로 줄고 응답 전체는 도구 설명에 담기며, 입력란은 움직이지 않습니다.

설비를 기다리는 쪽은 로직이 아니라 이 입력란이므로, 그 줄은 값이 어떻게 되었는지를 알리지 보냈다는 사실만 알리지 않습니다. 거부는 거부한 쪽의 말로 적힙니다. 보내기 전에 스테이션이 스스로 정한 것은 스테이션의 말로("'Setpoint'에 쓰지 않았습니다. 장치가 연결되어 있지 않습니다."), 전선 위에서 벌어진 일은 설비나 그 드라이버의 말로 적힙니다. 같은 포인트에 더 새로운 입력이 들어와 보내기 전에 앞질러 간 값은 거부가 아니며 아무 말도 하지 않습니다. 설비에 주어지는 것은 더 새로운 값이기 때문입니다.

## 권한과 잠금 {#permissions-and-the-lock}

변수나 태그에 쓰려면 대시보드를 조작하는 역할 권한이 필요합니다. 준비 포인트와 코멘트 포인트는 Process를 바꾸는 일이므로 대신 절차 실행 권한이 필요합니다. 막힌 누름은 공통 잠금 표시를 그리고 이유는 도구 설명에 담기며, 잠긴 동안에는 상자 자체도 쓸 수 없습니다([대시보드 페이지](home) 참조). 읽지 못하는 바인딩 포인트는 공통 읽기 실패 표시를 답니다. 플래그 키와 글 상자는 그래도 쓸 수 있습니다. 그 지시는 읽은 값에 기대지 않기 때문입니다.

공통 모양, 식별, 위치와 레이어, 액션 구역은 [구성 요소 페이지](components#the-shared-property-sections)에서 설명합니다.
