# 태그

> 태그 페이지를 카드별로: 머리글과 동사, 일반, 모든 드라이버의 칸을 담은 신호원, 변환, 쓰기 칸이 있는 실시간 값, 그리고 모두 바꾸기가 있는 사용하는 곳.

**태그**는 장치 위에서 주소로 가리킬 수 있는 지점 하나입니다. 버스 위의 주소 하나, 데이터 형식 하나, 그리고 원시 읽기를 공학값으로 바꾸는 변환이 태그입니다. 장치 아래의 태그 행을 선택하거나 장치의 태그 표에서 행의 열기를 누르면 그 페이지가 열립니다. Connector 보기는 읽고, Connector 구성은 편집하며, 태그 교정은 교정 단계만 편집합니다.

## 머리글 {#the-header}

실시간 점(태그에 값이 있는 동안은 초록, 값이 대체값이거나, 한계 단계가 결함을 올렸거나, 읽기가 끊겼을 때는 호박색, 그 밖에는 회색. 스테이션이 읽지 않는 태그, 곧 꺼진 태그나 장치가 꺼져 있거나 꺼진 회선 아래에 있거나 호스트를 아직 입력하지 않은 태그는 마지막에 무엇을 보여 주었든 회색), 태그 이름, 그리고 그 아래에 Logic과 대시보드가 입력하는 태그의 주소 `Connector.<Driver>.<Folders…>.<Device>.<Tag>`가 놓입니다. 해당할 때는 그 아래에 확인 안내를 담은 주의 문구(빈 이름, 빠진 주소, 계수 0)와 마지막 오류가 빨간색으로 나옵니다. 태그의 장치가 연결되어 있지 않은 동안에는 연결 실패를 되풀이하는 대신 장치를 가리키는 차분한 알림이 나옵니다: "이 태그는 장치 Furnace을(를) 거치는데, 그 장치가 연결되어 있지 않습니다. 이유는 장치 페이지에 있습니다."

## 명령 모음 {#the-command-bar}

| 명령 | 하는 일 | 회색이 되는 때(상황) | 그려지지 않는 때(역할) |
| --- | --- | --- | --- |
| **값 복사** | 표시된 그대로의 공학값을 클립보드에 복사합니다("'Temperature'의 값을 클립보드에 복사했습니다."). | 없습니다. | 없습니다. |
| **사용** | 태그를 수집과 실시간 주소 공간에 되돌립니다. | 이미 켜져 있을 때, 또는 스테이션이 변경을 거부할 때. | Connector 구성 권한이 없을 때. |
| **사용 안 함** | 태그를 수집과 실시간 주소 공간에서 거둡니다. 장치는 다른 태그를 계속 읽습니다. | 이미 꺼져 있을 때, 또는 스테이션이 변경을 거부할 때. | Connector 구성 권한이 없을 때. |
| **태그 삭제**(위험을 나타내는 색, 오른쪽) | "'Temperature'을(를) 삭제하시겠습니까? 'Furnace'에서 제거됩니다. 이 작업은 되돌릴 수 없습니다."라고 물은 뒤 삭제하고 장치를 선택합니다. | 스테이션이 변경을 거부할 때. | Connector 구성 권한이 없을 때. |

모든 카드는 [Connector](connector#the-detail-panel)에서 설명한 대로 자동으로 저장됩니다. Connector 구성이 없는 역할에게는 일반 카드와 신호원 카드가 위에 붙은 "Connector를 바꾸려면 'Connector 구성' 권한이 필요합니다."라는 안내와 함께 작동하지 않는 상태로 유지됩니다.

## 일반 카드 {#the-general-card}

| 칸 | 무엇인지 | 값 / 기본값 | 효과 |
| --- | --- | --- | --- |
| **태그 이름** | 지점의 이름이며, 버스 식별자와 주소 양쪽의 마지막 마디입니다. | 필수. | 입력하는 동안 이름 바꾸기가 참조 몇 곳을 데려가는지 미리 보여 주고, 확정하면 고쳐 씁니다. "태그 이름을 바꿨고 참조 2곳을 갱신했습니다." 비우면 거부됩니다. "태그 이름은 반드시 입력해야 합니다." OCPP 태그의 이름은 Meter, Status, Transaction 가운데 하나로 끝나야 합니다. "OCPP 태그 이름은 'Meter', 'Status' 또는 'Transaction'으로 끝나야 합니다(예: Connector1Meter)." |
| **데이터 형식** | 내장 서버가 공개하는 OPC UA 스칼라 형식입니다. | Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float, Double, String, DateTime, Guid, ByteString 가운데 드라이버가 다룰 수 있는 것으로 좁혀집니다. 드라이버가 Float를 가지면 기본값은 Float이고, 그렇지 않으면 드라이버가 내놓는 첫 형식입니다. | 바꾸면 거기에 딸린 것이 함께 맞춰집니다. NaN을 담을 수 없는 형식에서 NaN 한계 동작은 Null이 되고, 숫자가 아닌 형식에서 NaN 정책은 그대로 통과로 되돌아가며, 형식과 맞지 않는 시뮬레이션 신호 종류는 그 형식의 기본값으로 바뀌고, Modbus 레지스터 종류는 형식을 따라 비트와 레지스터의 경계를 넘습니다. 변환 카드도 형식에 따라 모양이 바뀝니다. |
| **접근** | 스테이션이 읽는지, 쓰는지, 둘 다 하는지. | 읽기 전용, 쓰기 전용, 읽기와 쓰기. 기본값은 읽기 전용입니다. OCPP와 LoRaWAN은 읽기 전용만 내놓습니다. Matter 태그는 드라이버가 바꿀 수 있는 값에만 쓰기를 내놓고, 그렇지 않으면 칸 아래에 이유를 밝힙니다([손으로 만드는 태그](driver-matter#a-tag-made-by-hand)). NI-DAQmx 태그는 측정이 허용하는 접근을 내놓습니다([측정](driver-ni-daqmx#measurements)). MIB가 읽기 전용으로 선언한 표준 객체의 SNMP 태그는 읽기 전용만 내놓고, 칸 아래에 이유를 알립니다([데이터 형식과 접근](driver-snmp#data-types-and-access)). File 태그는 장치가 쓰기를 허용할 때까지 읽기 전용만 내놓으며, 파일 정보는 읽기 전용으로 남습니다([태그가 읽는 것](driver-file#what-a-tag-reads)). Database 태그는 접근이 쓰기가 된 뒤에야 쓰기가 무엇을 하는지 보여 줍니다([쓰기](driver-database#writing)). | 읽기와 쓰기, 쓰기 전용은 실시간 값 카드에 쓰기 칸을 그립니다. 쓰기 전용 태그는 주기적으로 읽지 않으며 장치의 상태 건전성에도 세어지지 않고, 스테이션이 결코 읽지 않으므로 읽기 실패에 대한 정책도 없습니다. |
| **단위** | 공학 단위이며 자유 입력입니다. | 비어 있음. | 각 단계의 결과와 공학값 옆에, 그리고 값이 표시되는 모든 곳에 함께 나옵니다. |
| **읽기 주기 (ms)** | 장치의 읽기 주기를 태그별로 덮어쓰는 값입니다. | 0(장치 기본값 사용). 음수는 0으로 저장됩니다. | 이 값을 무시하는 Mitsubishi MC, BACnet, OCPP, LoRaWAN, MQTT에서는 숨겨집니다. |

## 신호원 카드 {#the-source-card}

"이 태그의 값이 어디에서 오는지와 가장 최근의 원시값입니다." 칸은 드라이버에 따라 달라집니다. 뜻은 드라이버 페이지가 설명하며, 여기에 있는 것은 패널이 그리는 그대로의 목록입니다.

### 자유 입력 주소 {#free-text-address}

입력하는 토큰으로 주소를 지정하는 드라이버는 칸 하나를 보여 주며, 이름은 드라이버마다 다릅니다. **노드 ID**(OPC UA), **심볼**(Beckhoff ADS), **디바이스 주소**(Mitsubishi MC), **컨트롤러 태그**(Rockwell), **리소스 경로**(Redfish), **PI 경로**(AVEVA PI), **경로**(HTTP), **토픽** 또는 **메트릭**(MQTT. 장치의 프로토콜이 일반 MQTT인지 Sparkplug B인지에 따름), **메모리 주소** 또는 **변수 이름**(Omron. 장치의 프로토콜이 FINS인지 NJ/NX 태그(이름으로 지정)인지에 따름), **쿼리**(SCPI instruments), **물리 채널**(NI-DAQmx), **OID**(SNMP)이며, 그 아래에 드라이버의 안내가 붙습니다. 이 드라이버들에서는 이 칸이 필수입니다. "이 드라이버에는 노드 ID이(가) 반드시 필요합니다."

### 드라이버별 형식 있는 칸 {#typed-fields-per-driver}

| 드라이버 | 칸 |
| --- | --- |
| Modbus TCP, Modbus RTU | **레지스터 종류**(코일 (0xxxx), 디스크리트 입력 (1xxxx), 입력 레지스터 (3xxxx), 홀딩 레지스터 (4xxxx). 모두 장치 매뉴얼의 주소가 그 종류에 붙이는 첫 숫자를 함께 적습니다. 기본값은 형식과 접근을 따릅니다. 읽기 전용 부울은 디스크리트 입력, 쓸 수 있는 부울은 코일, 읽기 전용 숫자는 입력 레지스터, 쓸 수 있는 숫자는 홀딩 레지스터입니다)와 **레지스터 번호(0부터)**. |
| Siemens S7 | **영역**(DataBlock, Merker, ProcessInput, ProcessOutput, Timer, Counter), **DB 번호**(DataBlock만), **시작 바이트**, **비트(0-7)**(부울 태그), **최대 길이(비우면 254)**(문자열 태그). |
| Rockwell | 컨트롤러 태그 칸 뒤에 오는 **태그 안 오프셋(바이트, BOOL은 비트)**. 0은 태그의 시작입니다. |
| BACnet | **객체 형식**(AnalogInput, AnalogOutput, AnalogValue, BinaryInput, BinaryOutput, BinaryValue, MultiStateInput, MultiStateOutput, MultiStateValue)과 **인스턴스**. 읽는 값은 현재값입니다. |
| OCPP | **충전 커넥터**(커넥터 번호이며 기본값은 1)이며, "태그 이름을 …Meter(전력량 읽기), …Status(커넥터 상태), …Transaction(진행 중인 트랜잭션 번호) 가운데 하나로 지으십시오."라는 안내가 붙습니다. |
| Redfish | 리소스 경로 뒤에 오는 **JSON 포인터(비우면 문서 전체)**이며, "예: /Temperatures/0/ReadingCelsius"입니다. |
| Matter | **출력 (endpoint)**, **Matter 클러스터**, **특성**을 한 줄에 둡니다. 클러스터는 Matter 카탈로그에서 이름으로 고릅니다. Matter 장치의 태그는 보통 장치 자신에게서 오며, 페어링한 뒤나 장치 검색에서 체크해 만듭니다([Matter](driver-matter#tags) 참고). 이 칸들은 손으로 만드는 드문 태그를 위한 것입니다. |
| MQTT | 일반 MQTT 장치에서 토픽 칸 뒤에 **값 경로**(JSON 페이로드 안에서 값이 있는 자리. 비우면 페이로드 전체를 읽음), **명령 토픽**(쓰기가 발행되는 곳. 비우면 태그는 읽기 전용으로 남음), **페이로드 템플릿**(쓰기가 발행하는 JSON이며 값 자리에 `{value}`를 둠). Sparkplug B 메트릭에는 아무것도 없습니다. [MQTT](driver-mqtt#tag-addressing)를 보십시오. |
| Generic serial and TCP | 입력할 주소가 없습니다. **읽기 방식**(요청과 응답 또는 수신 대기), **요청**, **메시지 필터**, **값을 꺼내는 방식**과 그 방식이 쓰는 칸, **장치가 소수점으로 쉼표를 씀**(Float와 Double), 그리고 쓰는 태그라면 **쓰기 메시지**와 **기대하는 회신**입니다. [Generic serial and TCP](driver-generic-serial-tcp#tag-addressing)를 보십시오. |
| SCPI instruments | 쿼리 옆에, 읽는 태그에는 **응답의 값**(쉼표로 구분된 응답에서 1부터 세어 어느 값이 태그의 것인지. 비우면 응답 전체를 읽습니다), 쓰는 태그에는 **쓰기 명령**(쓰기 때 보내는 것으로, 값이 들어갈 자리에 `{value}`를 둡니다). [SCPI instruments](driver-scpi#tag-addressing)를 보십시오. |
| NI-DAQmx | 물리 채널 옆에 **측정**과 그 측정의 칸: 측정 단위로 된 범위(**최소**와 **최대**), **단자 구성**, **션트 저항**과 **션트 저항값 (Ω)**, **열전대 종류**, **냉접점 보상 (CJC)**과 **CJC 온도 (°C)**, **셀 에지**, **카운트 방향**, **초기 카운트**, **입력 단자**. 모두 측정이 읽을 때만 그려집니다. [NI-DAQmx](driver-ni-daqmx#tag-addressing)를 보십시오. |
| SNMP | OID 아래에 읽기 전용으로 **MIB 이름**(객체의 표준 이름과 MIB가 그에 대해 말하는 것. 이름이 없으면 "표준 이름 없음")과 **숫자 OID**(모든 요청이 나르는 숫자). [SNMP](driver-snmp#the-oid)를 보십시오. |
| File | 입력할 주소가 없습니다. **읽는 내용**(값, 파일 전체, 파일 정보)과, 값이면 장치 형식의 필드: **열**과 **읽을 행**(CSV), **읽을 줄**과 **값을 꺼내는 방식**(자유 텍스트), **JSON 경로** 또는 **XML 경로**. 쓰기를 허용하는 장치에서는 **쓰기 동작**과 **줄 템플릿**. [File](driver-file#tag-addressing)을 보십시오. |
| Database | 입력할 주소가 없습니다. **읽는 내용**(**테이블과 열** 또는 **자체 쿼리**)과 그 필드입니다. **테이블**, **값 열**, **읽을 행**과 함께 **키 열**과 **키 값** 또는 **날짜 열**, 아니면 **쿼리 본문**이며, 쓰는 태그에서는 **쓰기 동작**과 **쓰기 명령**도 있습니다. [Database](driver-database#tag-addressing)를 보십시오. |
| LoRaWAN | **Cayenne LPP 채널/형식으로 주소 지정**(확인란), **채널 / 페이로드 오프셋**, **LPP 형식 코드**(LPP를 켰을 때), **비트마스크(16진수, 비우면 없음)**, **곱수 (비우면 없음)**. |

### 버스 길이와 바이트 순서 {#wire-length-and-byte-order}

| 칸 | 나오는 드라이버 | 무엇인지 |
| --- | --- | --- |
| **개수(레지스터, 비우면 자동)** | Modbus, 문자열 태그만 | 16비트 레지스터를 몇 개 읽을지입니다. 비우면 4개를 읽습니다. 다른 Modbus 형식은 폭이 정해져 있으므로(부울과 Int16과 UInt16은 레지스터 하나, Int32와 Float는 둘) 이 칸이 그려지지 않습니다. |
| **읽기 길이(바이트, 비우면 자동)** | Beckhoff, Mitsubishi, LoRaWAN | 바이트 수입니다. 비우면 형식에서 이끌어 냅니다. Boolean, Byte, SByte는 1, Int16과 UInt16은 2, Int32와 UInt32와 Float는 4, Int64와 UInt64와 Double은 8, String은 16, 그 밖에는 4입니다. |
| **길이 (문자 수, 비우면 16)** | Omron(FINS, String 태그만) | 문자열이 차지하는 문자 수로, 워드 하나에 두 글자, 1부터 1998까지입니다. 비우면 16을 읽습니다. FINS의 다른 형식은 형식이 정하는 워드 수를 차지하므로 이 칸을 그리지 않습니다. |
| **최상위 바이트 먼저 (MSB first, 빅 엔디언)** | Modbus(숫자 태그와 레지스터에 둔 부울 태그), LoRaWAN | 값의 어느 쪽 끝이 버스에서 먼저 오는지입니다. 괄호 안은 매뉴얼이 이 설정에 쓰는 말입니다. Modbus는 기본으로 켜져 있고 LoRaWAN은 꺼져 있습니다. Modbus는 텍스트의 바이트 순서를 정의하지 않으므로 Modbus 문자열 태그에는 이 칸이 제시되지 않습니다. 코일이나 디스크리트 입력의 Modbus 부울은 비트 하나뿐이라 순서를 정할 바이트가 없으므로 여기에도 이 칸이 제시되지 않습니다. |
| **최상위 워드 먼저 (상위 워드 먼저)** | Modbus(Int32와 Float 태그) | 레지스터 두 개짜리 값에서 어느 16비트 반쪽이 앞서는지입니다. 기본으로 켜져 있습니다. 두 상자 아래의 **값의 바이트 순서**는 두 상자가 만드는 배치를 매뉴얼이 쓰는 글자로 보여 줍니다. 둘 다 켜면 ABCD, 워드 상자를 끄면 CDAB, 바이트 상자를 끄면 BADC, 둘 다 끄면 DCBA입니다. 레지스터 하나로 된 형식(Boolean, Int16, UInt16)에는 두 번째 반쪽이 없으므로 거기서는 이 상자가 그려지지 않습니다. 페이로드에 앞세울 워드가 없는 LoRaWAN에도 제시되지 않습니다. |

### 신호원 주소 (버스) {#source-address-wire}

Modbus 태그는 칸 묶음의 끝에 **매뉴얼상의 주소**를 둡니다. 장치 매뉴얼이 인쇄하는 표기로 태그가 어디에 있는지 보여 주며, 종류의 첫 숫자 뒤에 1부터 센 레지스터를 붙입니다. 입력 레지스터 0은 30001, 거기 있는 Float는 30001에서 30002까지이고, 9998을 넘는 레지스터는 여섯 자리가 됩니다(홀딩 레지스터 9999는 410000). **레지스터 번호(0부터)**에 입력하는 번호는 요청이 담는 번호 그대로입니다. [Modbus TCP](driver-modbus-tcp#tag-addressing)를 보세요.

시뮬레이션이 아닌 그 밖의 모든 태그는 칸 묶음의 끝에, 드라이버가 실제로 받는 주소를 읽기 전용으로 미리 보여 줍니다. 위의 칸들과 장치의 연결 칸에서 조립되며, S7 바이트는 `DB1?0`, Rockwell 태그는 `Program:Main.Counter?0`, ADS 심볼은 `MAIN.fValue?4`, BACnet 오브젝트는 `0,3`, OCPP는 `ocpp://<charge point>/<connector>`, Redfish는 `<resource>#/Temperatures/0/ReadingCelsius`, LoRaWAN은 `<DevEUI>/<channel>/<lpp>?quantity=<n>`, Matter는 `<endpoint>/<cluster>/<attribute>`이며, 일반 MQTT 태그는 `<topic>?path=<value path>&command=<command topic>`, Sparkplug B 태그는 메트릭 이름, Generic serial and TCP 드라이버의 수신 대기 태그는 `listen?extract=position&start=5&length=6`, Omron FINS 태그는 `D100`(문자열이면 `D200?16`), NJ/NX 태그는 `Motor.Speed?0`, 응답의 세 번째 값을 읽는 SCPI 태그는 `ask=READ?&field=3`, NI-DAQmx 전압 입력은 `cDAQ1Mod1/ai0?measurement=voltageInput&terminal=diff&min=0&max=10`이며, `upsBatteryStatus.0`으로 쓴 SNMP 태그는 `1.3.6.1.2.1.33.1.2.1.0`이며, CSV 파일의 Force 열을 읽는 File 태그는 `column?name=Force`이며, 지시 4711의 수량을 읽는 Database 태그는 `row?table=dbo.Orders&column=Quantity&key=OrderNo&equals=4711`이며, OPC UA와 AVEVA PI와 HTTP는 토큰 자체입니다(장치의 리소스 경로가 앞에 붙습니다).

### 시뮬레이션 신호 매개변수 {#simulated-signal-parameters}

Simulated 태그에는 주소 칸이 없습니다. 이름이 곧 지점입니다. 대신 **신호 종류**가 있으며, 데이터 형식이 만들어 낼 수 있는 모양으로 좁혀진 목록이고 이름 옆에 모양의 작은 그림이 함께 나옵니다(숫자는 사인파, 램프, 랜덤 워크, 카운터. 부울은 부울 토글. 문자열은 열거 텍스트. DateTime은 시계. Guid는 임의 GUID. ByteString은 임의 바이트. 어떤 형식에나 설정값 유지와 펄스). **기본값**은 랜덤 워크, 카운터, 설정값 유지에 나타나며 텍스트 칸이거나, 부울에서는 "기본값은 켜짐 (true)" 확인란이거나, DateTime에서는 날짜 칸입니다. **상태(세미콜론으로 구분)**는 열거 텍스트에 나타납니다. "예: Run;Stop;Pause (3 s마다 한 단계씩 돕니다)." 패널이 편집하지 않는 모양 매개변수(사인의 폭과 주기, 펄스의 유지 시간)는 태그와 함께 그대로 따라다닙니다. [Simulated](driver-simulated) 페이지에 모든 매개변수가 나열되어 있습니다.

### 원시값 {#raw-value}

카드는 드라이버가 전달한 그대로의, 어떤 변환도 거치지 않은 가장 최근 원시 읽기로 끝나며, 스테이션의 숫자 형식으로 적습니다. 없으면 대시가 나옵니다.

## 변환 카드 {#the-conversion-card}

"원시값이 어떻게 공학값이 되는지를 정합니다." 이 카드는 숫자, 부울, 문자열 형식에 그려지며, 각 형식에는 고유한 변환이 있습니다. DateTime, Guid, ByteString은 그대로 통과하므로 그 카드에는 올바르지 않은 읽기 단계만 있습니다.

**숫자** 태그에서 이 카드는 위에서 아래로 이어지는 변환 경로입니다. **원시값**, 그다음 **스케일링**(기울기(×), 절편(+), 그리고 **2점 보정** 단추), **교정**(같은 셋), **올바르지 않은 읽기**(정책 둘), **한계**(최소, 최대, 동작), **소수 자릿수**(자릿수), 그리고 단위가 붙은 **공학값**입니다. 스케일링, 교정, 한계, 소수 자릿수의 각 단계는 머리에 단계를 켜고 끄는 확인란을 가지고 오른쪽에 결과를 보여 줍니다. 단계가 적용되면 `= value`, 건너뛰면 `→ value`입니다. 올바르지 않은 읽기에는 확인란이 없습니다. 끄는 것이 이미 그 정책 가운데 하나이기 때문입니다(NaN에는 **그대로 통과**, 장치가 응답하지 않았을 때는 **오류 표시**). 그 머리에는 제목과 결과만 있으며, 결과는 언제나 `= value`입니다. 한계 결함이 나면 한계 단계가 빨갛게 되고 카드 아래에 "값 130은(는) 한계(0에서 100까지)를 벗어납니다."가 나옵니다. 계산과 기본값과 정책은 [값 변환 경로](connector-value-pipeline)에 있고, 2점 도우미와 스케일링과 교정 사이의 권한 구분은 [교정](connector-calibration)에 있습니다.

카드의 모든 숫자는 실시간 값과 똑같이 스테이션의 숫자 형식([언어와 형식](settings-localization))으로 적습니다. 단계는 그 결과가 가진 자릿수를 최대 여섯 자리까지 보여 주고, 소수 자릿수 단계는 켜져 있을 때 선언한 자릿수를 보여 줍니다. Float 태그의 단계는 float가 담고 있는 그대로 읽힙니다(239.050003이 아니라 239.05). **공학값**은 태그가 내보내는 값이며, 실시간 값 카드와 기록기와 모든 식이 읽는 바로 그 값입니다. 스케일링이나 교정이 값을 바꾸는 정수 태그는 실수를 내보냅니다. 스케일링이 0.1인 Int16 태그는 소수 자릿수 단계에서 62.40, 공학값으로도 62.40이 됩니다([값 변환 경로](connector-value-pipeline#raw-first)). 스케일링과 교정이 값을 그대로 두는 정수 태그는 정수를 내보내므로, 한계 단계가 값을 붙이는 경계에 소수가 있고 소수 자릿수 단계가 이미 소수 없이 반올림하지 않는다면, 값 아래에 "Int16은(는) 정수만 담을 수 있으므로 이 태그의 공학값은 가장 가까운 정수로 반올림됩니다. 변환에서 생기는 소수 부분을 유지하려면 데이터 형식으로 Float 또는 Double을 선택하십시오."라는 안내가 나옵니다. Int64 또는 UInt64 태그에서, 실수로는 정확히 담을 수 없을 만큼 큰 원시값이나 공학값(나노초 단위로 센 값 등)은 모든 자릿수를 살려 자릿수 묶음 기호 없이 적습니다.

**부울** 태그는 **반전 (원시값의 부정을 보고합니다)**, **결과**, 그리고 잘못된 읽기 정책을 보여 줍니다. **문자열** 태그는 **부분 문자열 시작**과 **길이(비우면 끝까지)**, **결과**, 그리고 잘못된 읽기 정책을 보여 줍니다. **DateTime**, **Guid**, **ByteString** 태그는 그 단계만 보여 줍니다. **장치가 응답하지 않았습니다** 줄에서 **오류 표시**와 **마지막 정상 값 유지**를 고릅니다. 쓰기 전용 태그는 읽히지 않으므로 이 단계에서 장치가 답하지 않았을 때의 줄이 빠집니다. 숫자 태그에는 NaN 정책만 남고, 부울이나 문자열 태그에는 올바르지 않은 읽기 단계가 아예 나오지 않으며, DateTime, Guid, ByteString 태그에는 변환 카드가 나오지 않습니다.

스케일링과 교정을 지나면 숫자 단계들과 부울, 문자열 변환은 보통의 구성입니다. Connector 구성이 편집하고 나머지는 읽습니다.

## 실시간 값 카드 {#the-live-value-card}

| 항목 | 보여 주는 것 |
| --- | --- |
| **현재 값** | 단위가 붙은 공학값이며, 스테이션의 숫자 형식([언어와 형식](settings-localization))으로 적습니다. 자릿수는 소수 자릿수 단계가 선언한 만큼이고(스케일링과 교정이 값을 그대로 두는 정수 형식에서는 소수를 적지 않습니다), 그 단계가 꺼져 있으면 읽은 값이 가진 자릿수이며 최대 여섯 자리입니다. 없으면 대시입니다. |
| 대체값 안내 | 값이 측정이 아닐 때 나옵니다. "측정값이 없어 대신 쓰는 값입니다.", "마지막 정상 값이며, 장치가 응답하지 않는 동안 유지됩니다.", "읽기가 실패해 대신 쓰는 값입니다."이며, 잘못된 읽기 정책을 따릅니다. |
| 끊긴 읽기 안내 | 읽기가 끊겼을 때, 곧 태그의 읽기 주기에 10초를 더한 시간 동안 새 읽기가 들어오지 않았을 때 나옵니다. "애플리케이션 시각 뒤로 새 읽기가 들어오지 않았습니다. 태그는 이를 실패한 읽기로 봅니다." 위의 값은 [장치가 응답하지 않았을 때](connector-value-pipeline#the-device-did-not-answer) 태그가 제시하는 값이며 기본으로는 대시이고, 태그가 마지막 정상 값을 유지하거나 대체할 때는 대체값 안내와 함께 나옵니다. 점은 호박색이 되며, 장치의 상태 건전성은 이 태그를 응답하지 않는 것으로 셉니다. |
| **원본 시각** | 장비가 그 값을 읽은 시각입니다. OPC UA 장치에서는 서버가 값과 함께 보낸 원본 시각이며, 서버는 값이나 그 품질이 바뀔 때까지 이 시각을 그대로 둘 수 있으므로 변하지 않는 값에서는 애플리케이션 시각보다 이른 시각이 보일 수 있습니다. 다른 드라이버에서는 Connector가 그 값을 받은 시각이며, 애플리케이션 시각과 같습니다. 읽기가 실패하는 동안에는 이름이 **마지막 시도**로 바뀌고 시각은 그 시도의 것이 되며, 마지막 정상값을 유지하는 동안과 읽기가 끊긴 동안에는 이름이 **원본 시각** 그대로이고 그 읽기의 시각이 그대로 남습니다. |
| **애플리케이션 시각** | Connector가 값을 받은 시각입니다. |
| **쓸 값** | 읽기와 쓰기나 쓰기 전용 태그에서, Connector 구성에게만 나옵니다. 텍스트 칸(부울은 "켜짐(true)" 확인란, DateTime은 날짜 칸)과 **쓰기**입니다. "공학값을 입력하십시오. 쓰기 전에 스케일링과 반전이 거꾸로 적용됩니다." 상태 줄은 무엇이 나가기 전에는 "쓸 값을 입력하십시오."나 "값을 변환하지 못했습니다."이고, 값이 가는 동안에는 "쓰는 중…"이며, 그다음에 결과입니다. |

쓰기는 실행이 스테이션을 잡고 있거나 런타임이 정지된 동안 이유와 함께 회색이 됩니다. 설비를 기다리는 쪽은 로직이 아니라 이 패널이므로, 상태 줄은 요청이 떠났다는 사실만이 아니라 값에 실제로 무슨 일이 있었는지를 알립니다. 같은 태그의 두 번째 값은 첫 번째가 아직 가고 있는 동안에는 물리칩니다. 이 줄이 가려내는 결과는 이렇습니다.

| 상태 줄 | 무슨 일이 있었는가 |
| --- | --- |
| "값을 썼습니다." | 설비가 그 값을 받아들였습니다. |
| "쓰기가 거부되었습니다: 이 신호원을 어떤 조작이 쓰고 있습니다." | 실행이나 인터록이 태그를 잡고 있습니다. 깔때기가 잡고 있는 쪽을 밝힌 경우에는 그 자리에 그 문장이 대신 적힙니다("쓰기가 거부되었습니다: `<reason>`."). |
| "쓰기가 거부되었습니다: 이 태그는 읽기 전용입니다.", "쓰기가 거부되었습니다: 이 태그는 더 이상 실행되고 있지 않습니다.", "쓰기가 거부되었습니다: 값이 태그의 형식과 맞지 않습니다.", "쓰기가 거부되었습니다: 지금 스테이션은 쓰기를 받지 않습니다." | 무엇이 나가기 전에 스테이션이 스스로 정했습니다. |
| "'Flow'은(는) 보내기 전에 더 새로운 값으로 대체되었습니다." | 같은 태그의 더 새로운 값이 장치의 대기열에서 이 값을 앞질러 대신 나갔습니다. 실패가 아닙니다. 설비가 듣는 것은 더 새로운 값입니다. |
| "쓰기가 현장 장비에 닿기 전에 취소되었습니다." | 차례를 기다리는 동안 요청이 거두어졌습니다. |
| "현장 장비가 쓰기를 거부했습니다.", "현장 장비가 쓰기를 거부했습니다: `<reason>`." | 장치나 그 드라이버가 값을 거절했습니다. 드라이버가 이유를 밝혔다면 그 이유가 스테이션의 언어로 붙습니다("주소가 읽기 전용입니다", "장치가 연결되어 있지 않습니다"). 현장 장비 자신의 코드는 어느 언어에서나 똑같이 읽히므로 그대로 붙습니다. 예를 들어 Matter 장치의 상태(CONSTRAINT_ERROR, 0x87)나 ADS 오류(ADS 0x704)입니다. 스테이션이 자기 언어로 말할 수 없는 이유의 거부는 이유 없이 표시되며, 드라이버 자신의 영어 문장은 진단 로그에 남습니다. 스테이션이 종류를 아는 실패(Modbus 유닛의 예외 응답, 끊긴 연결, HTTP 상태)는 그 대신 태그의 빨간 줄이 붙이는 문장으로 모든 언어에서 전합니다. [마지막 오류](connector-health#last-error)와 같습니다. |
| "쓰기가 확인되지 않았습니다: 현장 장비가 제시간에 응답하지 않았습니다." | 제때 답이 오지 않아, 설비가 값을 받아들였는지 알 수 없습니다. |
| "쓰기에 실패했습니다: 현장 장비에 닿지 못했습니다." | 전선이 답한 나머지 전부이며, 무엇보다 장치가 접속되어 있지 않은 경우입니다. |

원시값이 나가기 전에 무엇이 되돌려지는지는 [값 변환 경로](connector-value-pipeline#writes-reverse-the-pipeline)에 있습니다.

## 사용하는 곳 카드 {#the-used-by-card}

"이 태그를 읽거나 쓰는 스테이션의 모든 것입니다." 표에는 모든 참조가 **종류**(채널, 정지 인터록, 자동화, 변수, 액션, 경보, 대시보드, Modbus 서버, OPC UA 서버, MQTT 발행), **위치**(그것을 담고 있는 모델이나 대시보드. 최상위 Logic 종류와 [Modbus 서버](connector-modbus-server) 레지스터 맵의 행에서는 비어 있습니다), **이름**(맵의 행이면 레지스터 종류와 매뉴얼상의 주소, 예를 들어 홀딩 레지스터 (4xxxx) 40101)과 함께 나열됩니다. 하나도 없으면 "어떤 채널이나 속성도 이 태그를 참조하지 않습니다."입니다. 이 조회는 참고용이며, 실패하면 표가 빈 채로 남습니다. 맵의 행은 태그를 그 신원으로 붙들고 있으므로 이름이 바뀌면 따라갑니다. 태그가 삭제된 뒤에도 잃어버린 태그를 계속 가리키고 그 행을 읽는 클라이언트에는 예외 04로 응답하므로, 태그를 삭제하는 이곳에 나열됩니다. [OPC UA 서버의 목록](connector-opcua-served-nodes) 행도 같은 방식으로 나열되며, 이름에는 접근이 나옵니다. 태그를 바꾸면 그 행은 새 태그로 옮겨 갑니다. 브로커의 [발행 카드](driver-mqtt#the-publish-card) 행도 같은 방식으로 나열되며, 위치에는 브로커가, 이름에는 그 토픽이 나옵니다. 태그를 바꿔도 토픽은 그대로입니다.

Connector 구성에게는 카드에 바꾸기 장치가 더해집니다. 실시간 주소 공간의 다른 모든 태그를 주소로 나열한 선택 목록, **모두 바꾸기** 단추, 그리고 행마다의 바꾸기 동작입니다. 모두 바꾸기는 나열된 모든 참조를 고른 태그로 한 번에, 전부 아니면 전무로 고쳐 씁니다("이제 참조 4곳이 Connector.Simulated.Air.Pump.Flow을(를) 사용합니다.", "바꿀 참조가 없습니다."). 행 동작은 그 하나만 고쳐 씁니다("이제 'Furnace temperature'이(가) Connector.Simulated.Air.Pump.Flow을(를) 참조합니다." 또는 그사이에 옮겨졌다면 "그사이에 참조가 바뀌었습니다. 새로 고친 다음 다시 시도하십시오."). 정지 인터록이나 자동화 참조는 Process의 구조이므로, 바꾸려면 Process 관리 권한이 더 필요합니다. "유닛 인터록의 신호원을 바꾸려면 'Process 관리' 권한이 필요합니다.", "모두 바꾸기에는 유닛 인터록의 신호원이 들어 있어 'Process 관리' 권한이 필요합니다." 태그를 고르기 전에는 모두 바꾸기와 행의 동작이 회색으로 남고 도구 설명에 "먼저 이 참조를 받을 태그를 고르십시오."가 나옵니다. 역할에 없는 Process 관리가 필요한 참조가 있는 동안에는 위의 문장을 도구 설명으로 하여 회색으로 남습니다. Modbus 서버 레지스터 맵의 행은 서버 자신의 규칙에 따라 고른 태그로 옮겨집니다. 클라이언트가 쓸 수 있는 행은 쓰기를 받지 않는 태그를 거부하며, 그때는 아무것도 바뀌지 않습니다.

## 태그 페이지가 하지 않는 일 {#what-the-tag-page-does-not-do}

태그의 장치와 드라이버는 고정입니다. 지점을 옮기려면 다른 장치에 만든 다음 모두 바꾸기를 쓰십시오. 여기에서는 한 번에 태그 하나의 단계만 편집합니다. 여러 행을 한꺼번에 편집하는 일은 장치 표의 일괄 편집이며 [장치](connector-devices#mass-edit)에서 설명합니다. 이 페이지에는 이력이나 추세가 없습니다. 실시간 점과 값과 시각은 1초에 한 번 새로 고쳐지는 현재 샘플입니다.
