# 장치 폴더

> 드라이버 아래의 폴더: 만들기, 이름 바꾸기, 없애기, 장치를 폴더에 넣기, 두 단계 제한, 폴더 페이지, 그리고 폴더가 Logic 주소의 한 단계가 되는 방식.

**폴더**는 통신 열에서 한 드라이버 아래의 장치를 최대 두 단계 깊이까지 묶습니다. 버스 위에서는 아무것도 바뀌지 않습니다. 주기적 읽기, Process 바인딩, 공개 OPC UA 네임스페이스는 폴더를 결코 보지 않습니다. 그러나 폴더는 Logic과 대시보드가 쓰는 **주소**의 한 단계이므로, 장치를 폴더에 넣는 일은 주소를 바꾸는 일이며 애플리케이션이 모든 참조를 대신 고쳐 씁니다. 폴더는 Modbus RTU와 MQTT를 뺀 모든 드라이버에 있습니다. Modbus RTU의 장치는 대신 시리얼 회선으로, MQTT의 장치는 브로커로 분류됩니다. Generic serial and TCP와 SCPI instruments에서는 회선 위에 있지 않은 장치만 폴더를 가지며, 시리얼 회선 위의 장치는 회선으로 분류됩니다. 폴더를 보려면 Connector 보기가 필요하고, 폴더의 모든 명령에는 Connector 구성이 필요합니다.

## 폴더 만들기 {#creating-a-folder}

| 동작 | 놓이는 곳 |
| --- | --- |
| 열 바닥글의 **새로 만들기…** > `<드라이버>` > **새 폴더** | 드라이버 자체 단계. 장치를 폴더에 넣을 수 있는 추가된 드라이버, 곧 Modbus RTU와 MQTT를 뺀 모든 드라이버 아래에 나옵니다. |
| 열 바닥글의 **새로 만들기…** > `<드라이버>` > `<폴더>` > **새 하위 폴더** | 그 폴더 안에, 둘째 단계로. 첫 단계 폴더에만 나옵니다. |
| 열려 있는 폴더의 모음에 있는 **새 폴더**, 또는 그 오른쪽 단추 메뉴 | 그 폴더 안에 두 번째 단계로 놓입니다. 두 번째 단계 폴더에서는 모음에서 회색이 되고("이 폴더는 이미 폴더가 겹칠 수 있는 깊이에 있습니다.") 메뉴에서도 같은 방식으로 회색이 됩니다. |
| 장치를 오른쪽 단추로 누르고 **이동 위치** > **새 폴더** | 드라이버 단계에 만들어지고, 같은 동작으로 장치가 그 안으로 옮겨집니다. |
| 장치를 오른쪽 단추로 누르고 **이동 위치** > **여기에 만드는 새 하위 폴더** | 첫 번째 단계 폴더 안에 이미 있는 장치에만 제시되며, 하위 폴더를 만들고 장치를 그 안으로 옮깁니다. |

새 폴더의 이름은 "새 폴더"(다음은 "새 폴더 2", 이런 식)가 되고, 그 위의 가지가 열리며, 폴더의 행은 곧바로 이름 칸으로 바뀝니다. 이름을 입력하고 Enter를 누르면 확정되고, 칸을 그냥 벗어나면 이름은 "새 폴더"로 남습니다. 폴더는 무엇인가가 들어올 때까지 비어 있는 채로 그 자리에 있습니다. 만들어졌다는 사실이 기록되므로, 다시 읽어도, 마지막 장치가 빠져나가도 폴더는 남으며, 남아 있는 동안 그 드라이버는 제거할 수 없습니다. 작업 기록 줄은 "폴더 '새 폴더'을(를) 만들었습니다."라고 알립니다.

## 폴더 페이지 {#the-folder-page}

머리글에는 폴더 이름이 놓이고, 빈 폴더라면 "폴더는 목록을 정리할 뿐 그 밖의 일은 하지 않습니다. 여기에 장치를 추가하거나, 트리에서 옮겨 오십시오."가, 그렇지 않으면 "이 트리에서 장치 3개을(를) 묶습니다. 폴더는 목록을 정리할 뿐 그 밖의 일은 하지 않습니다. 안에 있는 장치를 선택하면 내용을 보고 편집할 수 있습니다."가 나옵니다. 표에는 여기에 **바로** 놓인 장치만 나열됩니다(하위 폴더는 트리의 행이지 이 표의 행이 아닙니다). **장치**, **Endpoint**(기본 URI), **태그**, 그리고 **열기** 동작입니다. 비어 있으면 "여기에 바로 놓인 장치가 없습니다. 하나를 추가하거나, 트리에서 옮겨 오십시오."입니다.

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

| 명령 | 하는 일 | 회색이 되는 때(상황) | 그려지지 않는 때(역할) |
| --- | --- | --- | --- |
| **새 폴더** | 여기에 하위 폴더를 만들고 이름 칸을 엽니다. | 실행이 스테이션을 잡고 있을 때, 런타임이 정지되었을 때, 스캔이나 페어링이 진행 중일 때("진행 중인 스캔이나 페어링을 끝낸 다음에 추가하십시오."), 또는 이 폴더가 이미 두 번째 단계일 때. | Connector 구성 권한이 없을 때. |
| **폴더 이름 바꾸기** | 폴더의 행을 이름 칸으로 바꿉니다. | 실행이 스테이션을 잡고 있거나 런타임이 정지되었을 때. | Connector 구성 권한이 없을 때. |
| **폴더 제거**(위험을 나타내는 색, 오른쪽) | 폴더를 비워 드라이버 단계로 돌려보내고 폴더를 거둡니다. | 위와 같을 때. | Connector 구성 권한이 없을 때. |

### 페이지 안 {#on-the-page}

폴더의 표에 행을 늘리는 것은 그 표의 제목 오른쪽, 늘리는 행 위에 있습니다.

| 명령 | 위치 | 하는 일 | 회색이 되는 때(상황) | 그려지지 않는 때(역할) |
| --- | --- | --- | --- | --- |
| **새 장치** | **장치** 제목 오른쪽. | 이 폴더 안에 "새 장치"를 만들고, 이 표에서 강조 표시해 보이는 곳까지 스크롤합니다. Matter 아래에서는 대신 드라이버 페이지에 페어링 양식을 열고, 페어링한 장치는 이 폴더에 들어갑니다. | 실행이 스테이션을 잡고 있을 때, 런타임이 정지되었을 때, 또는 스캔이나 페어링이 진행 중일 때("진행 중인 스캔이나 페어링을 끝낸 다음에 추가하십시오."). Matter 아래에서는 페어링에 쓸 수 있는 네트워크가 없을 때도("장치가 들어갈 네트워크를 먼저 추가하십시오."). | Connector 구성 권한이 없을 때. |

폴더 행의 오른쪽 단추 메뉴는 새 장치, 새 폴더, 폴더 이름 바꾸기, 폴더 제거를 제시합니다. 두 번째 단계 폴더에서는 새 폴더가 명령 모음과 같은 이유를 달고 회색으로 남습니다.

## 폴더 이름 바꾸기 {#renaming-a-folder}

이름 바꾸기는 하위 폴더를 포함해 안에 있는 모든 장치를, 장치 이름 바꾸기가 쓰는 것과 같은 참조 고쳐 쓰기를 거쳐 다시 분류한 다음, 폴더 자신의 기록을 옮깁니다. 작업 기록 줄에는 "폴더 'Meters'의 이름을 'Utilities'(으)로 바꿨습니다."와 "참조 4곳을 갱신했습니다."가 나옵니다. 이름은 비어 있거나 `/`가 들어 있을 때("폴더에는 이름이 있어야 하며, 이름에 '/'을(를) 넣을 수 없습니다."), 형제 폴더가 이미 그 이름을 가지고 있을 때("여기에는 이미 'Meters'(이)라는 폴더가 있습니다.": 두 폴더를 합치는 일은 이동이며, 이동으로 요청해야 합니다), 또는 같은 단계의 장치가 그 이름이 만드는 주소 마디를 이미 가지고 있을 때("폴더 이름 'Pump 1'은(는) 주소 구획 'Pump_1'이(가) 되는데, 그 자리는 옆에 있는 장치 'Pump-1'이(가) 이미 쓰고 있습니다.") 거부됩니다. 폴더 이름은 대소문자를 구별하지 않고 비교하며, 트리가 보여 주는 것은 처음 본 표기입니다. 대소문자만 바꾸어도 주소가 바뀌므로 그것도 진짜 이름 바꾸기입니다.

안에 있는 장치를 옮길 수 없으면(저장에 실패한 편집이나 거부된 고쳐 쓰기 때문에) 이름 바꾸기는 거기에서 멈추고 어디까지 갔는지 말합니다. "폴더 'Meters'의 이름 바꾸기가 장치 5개 중 2개를 처리한 뒤 멈췄습니다: … 이미 옮겨진 장치는 'Utilities'에 남습니다."

## 폴더 없애기 {#removing-a-folder}

폴더 없애기는 먼저 묻습니다. 빈 폴더라면 "'Meters' 폴더를 제거하시겠습니까?"입니다. 그렇지 않으면 "폴더 'Meters'을(를) 제거하시겠습니까? 그 안의 장치 3개가 Simulated 아래로 돌아갑니다. 삭제되는 것은 없고, 모든 참조가 새 주소를 자동으로 따라갑니다."입니다. 하위 폴더를 포함해 안에 있는 모든 장치가 참조 고쳐 쓰기를 거쳐 드라이버 자체 단계로 돌아가고, 폴더의 기록도 함께 사라집니다. "폴더 'Meters'을(를) 제거했습니다. 장치 3개가 드라이버 바로 아래로 돌아갔습니다."와 "참조 4곳을 갱신했습니다." 없애기는 결코 장치를 삭제하지 않습니다.

## 장치 옮기기 {#moving-a-device}

장치를 오른쪽 단추로 누르고 **이동 위치**를 엽니다. 하위 메뉴에는 **새 폴더**, (장치가 첫 번째 단계에 있을 때) **여기에 만드는 새 하위 폴더**가 나오고, 구분선 뒤에 **`<드라이버>` 아래**(장치가 이미 드라이버 단계에 있으면 회색)와 그 드라이버의 기존 폴더 경로가 장치 자신의 것을 빼고 모두 나옵니다. 이동은 장치에 저장하지 않은 편집이 있으면 먼저 저장하고, 그 태그들의 옛 주소를 가리키는 모든 참조를 고쳐 쓴 다음, "'Pump'을(를) 'Utilities/Meters'(으)로 옮겼고 참조 4곳을 갱신했습니다." 또는 "'Pump'을(를) 폴더 밖으로 옮겼습니다."라고 알립니다. 시리얼 회선 위의 장치에는, 어느 드라이버의 것이든, 이동이 아예 제시되지 않습니다. 장치 복제는 원본이 어느 폴더에 있든 언제나 복제본을 드라이버 자체 단계에 둡니다. 장치 페이지에는 폴더 칸이 없습니다. 분류는 트리의 명령입니다.

## 주소 안의 폴더 {#the-folder-in-the-address}

`Utilities/Meters` 아래에 놓인 장치는 자기 태그의 주소를 `Connector.<Driver>.Utilities.Meters.<Device>.<Tag>`로 씁니다. 각 폴더 마디는 다른 모든 마디와 같은 방식으로 정리됩니다(글자나 숫자가 아닌 문자는 밑줄이 되고, 숫자로 시작하면 앞에 밑줄이 붙습니다). 버스 식별자 `<Driver>.<Device>:<Tag>`는 그대로이므로, 장치를 폴더에 넣어도 내장 서버와 실행 중인 Process 바인딩과 외부 OPC UA 클라이언트는 아무것도 알아채지 못합니다. 주소가 곧 트리 경로이므로, 대소문자만 다르게 적힌 폴더로 옮긴 장치는 두 번째 폴더를 여는 대신 이미 그려져 있는 폴더에 합류합니다. 두 가지 이름은 [Connector](connector#wire-key-and-address-the-two-identities-of-a-tag)에서 설명합니다.

## 트리 안의 폴더 {#folders-in-the-tree}

폴더 행은 장치 개수("장치 2개" 또는 "비어 있음")와, 하위 폴더를 포함해 그 아래 모든 장치를 합친 상태 건전성 점을 보여 줍니다. 사용 안 함으로 둔 장치는 중립이며 폴더를 호박색이나 빨강으로 끌어내리지 않습니다. 검색 상자는 폴더 이름과도 일치하며, 일치한 폴더는 그 아래에 있는 것을 모두 보이는 채로 둡니다. 정상, 문제, 꺼짐 칩에서는 안에 있는 무엇인가가 조건에 맞을 때 폴더가 그려집니다. 빈 폴더는 안에 조건에 맞을 것이 없습니다. 검색 상자가 비어 있으면 전체에서만 그려지고, 검색어를 입력했으면 그 글자가 자기 이름이나 위에 있는 폴더 또는 드라이버의 이름과 일치할 때 어느 칩에서든 그려집니다. 폴더는 자기 드라이버 아래에서 이름순으로 먼저 오며, 드라이버 자체 단계에 놓인 장치보다 앞에 놓입니다.

## 폴더가 하지 않는 일 {#what-folders-do-not-do}

폴더에는 자기 설정이 없습니다. 설명도, 아이콘도, 폴더별 주기적 읽기나 상태 건전성 규칙도 없습니다. 폴더 자체를 주소로 가리키는 것은 없으며, 빈 폴더는 어떤 주소도 공개하지 않습니다. 폴더는 두 단계를 넘겨 겹치지 않고, 드라이버 사이에서 공유되지 않으며, Modbus RTU와 MQTT 아래, 그리고 시리얼 회선 위에는 존재하지 않습니다.
