도구를 범위별로

에이전트가 부를 수 있는 도구 하나하나가 하는 일이며, 그것을 알리는 기능 스위치별로 묶었습니다.

Markdown으로 보기

도구 이름은 변하지 않는 snake_case 식별자입니다. 오류는 구조화되어 있고 바로 손댈 수 있습니다. 실패한 호출은 무엇이 잘못되었는지와, 그것을 고치는 도구나 단계를 밝히는 힌트를 함께 돌려주므로, 에이전트는 짐작하는 대신 스스로 고쳐 갑니다. 백업(관리) 범위가 켜져 있으면 서버는 구성을 바꾸기 전에 구성 백업을 만들라고 에이전트에게 안내하기도 합니다. 이 가운데 어느 목록을 에이전트가 실제로 보는지는 범위마다 열리는 것에 있습니다.

Connector, 읽기

도구 하는 일
connector_browse 설정된 트리를 실시간 상태 건전성과 함께 나열합니다. Modbus RTU는 드라이버, 시리얼 회선, 장치, 태그로, 그 밖의 모든 드라이버는 드라이버, 장치, 태그로 나오며 장치마다 그 폴더가 옆에 놓입니다. tag_readtag_write와 Logic 수식이 쓰는 태그 별칭(Driver.Folders….Device.Tag)을 드러냅니다. 내장 서버가 정지되어 있는 동안 별칭은 null입니다.
tag_read 별칭으로 태그 하나의 실시간 값을 읽습니다. 장치 단계의 원시값, 변환 경로를 지난 공학값, 품질, 그리고 두 시각입니다.

Connector, 구성

도구 하는 일
driver_capabilities 앱이 섬길 수 있는 모든 드라이버를 나열하며, 장치에 필요한 연결 칸, 태그 주소 모델(자유 입력 주소와 형식 있는 칸), 장치 검색 지원과 그 매개변수, 타이밍 범위, 지원하는 값 형식을 함께 보여 줍니다. 에이전트가 device_upserttag_upsert 전에 읽는 지도입니다.
serial_line_list 꺼져 있거나 비어 있는 것까지 포함해, 저장된 모든 Modbus RTU 시리얼 회선을 변하지 않는 id와 설정값과 자동값과 실제 적용값으로 나열합니다.
serial_line_upsert Modbus RTU 회선을 만들거나 변하지 않는 id로 고칩니다. 이름과 사용 여부는 언제든 바뀌고, 최소 트랜잭션 간격도 켜져 있는 동안 바뀌며, 시리얼 포트와 보드레이트와 시리얼 형식과 응답 제한 시간은 저장된 회선이 꺼져 있을 때에만 바뀝니다.
serial_line_delete 변하지 않는 id로 회선을 지웁니다. 아직 장치를 담고 있는 회선은, 그 아래의 모든 장치와 태그를 지우도록 호출이 명시적으로 허락하지 않는 한 거부됩니다.
device_upsert 드라이버와 이름으로 장치를 만들거나 고칩니다(드라이버는 만든 뒤에 바뀌지 않습니다). 건네준 매개변수만 바뀌고, 연결 칸은 드라이버마다 다르며, 장치를 폴더로 옮기면 옛 태그 주소에 대한 모든 참조가 고쳐 쓰입니다. 변경은 곧바로 실행 중인 서버에 맞춰집니다.
device_delete 장치와 그 모든 태그를 지웁니다. 곧바로 실행 중인 서버에 맞춰집니다.
tag_upsert 장치에 태그를 만들거나 고칩니다. 주소 지정은 드라이버마다 다릅니다(자유 입력 주소와 형식 있는 칸). 응답은 조립된 버스 주소와 tag_read용 별칭을 되돌려 줍니다. 숫자 태그에는 올바르지 않은 읽기 단계(NaN 동작과 읽기 실패 표시)도 들어 있습니다.
tag_delete 태그를 지웁니다. 곧바로 맞춰집니다.

Logic, 읽기

도구 하는 일
logic_browse 뿌리에서 시작하는 Logic 주소 공간, 곧 모든 수식이 읽는 그 점 트리를 둘러봅니다. System, Server, Connector, Variables, Alarms, Process, Assets입니다. 운전자가 만든 폴더도 실제 주소 단계이며, 자식 포인트에는 실시간 값과 품질이 함께 담깁니다.
logic_read 점 주소(예를 들어 Variables.Setpoint)로 포인트 하나를 읽고 실시간 값과 품질을 돌려줍니다.

Logic, 구성

upsert는 일부만 바꿉니다(빠뜨린 매개변수는 값을 그대로 지킵니다). 그리고 합쳐진 초안은 모두 Logic 편집기가 적용하는 것과 같은 검사를 통과합니다. 올바르지 않은 초안은 거부되고 반쯤 적용되는 것은 없습니다.

도구 하는 일
variable_upsert 변수를 만들거나 고칩니다. 수식(주소 공간 위의 읽기 전용 JavaScript 수식 하나)이거나 내부 값(쓸 수 있고 원하면 유지되는 값)입니다. 이름이 키이고, 그것을 다듬은 것이 주소입니다. 폴더 매개변수가 변수를 그 자리에 놓으며 옛 주소에 대한 모든 참조를 고쳐 씁니다.
variable_delete 경로로 변수를 지우며 유지된 값도 함께 지웁니다. 그 변수에 묶인 채널은 신호원을 잃습니다.
action_upsert 액션을 만들거나 고칩니다. 쓰기 동사가 정확히 둘, 곧 내부 값 변수 대입과 공학값 태그 쓰기뿐인 JavaScript 실행문 묶음입니다. 정적으로 검사하며 저장할 때 결코 실행하지 않습니다.
action_delete 이름으로 액션을 지웁니다. 그것에 묶인 트리거는 쉽니다.
trigger_upsert 간격 트리거를 만들거나 고칩니다. intervalMs(최소 100)마다 묶인 액션이 로직 대기열에서 발동하고, 실행이 아직 끝나지 않았을 때의 틱은 건너뜁니다. 액션과의 묶임은 느슨하며 이름으로 이어집니다.
trigger_delete 트리거를 지웁니다. 묶여 있던 액션은 그대로입니다.
alarm_upsert 경보를 만들거나 고칩니다. Bool 조건 수식, 우선순위(심각/높음/보통/낮음), 발생과 복귀 지연, 확인이 필요한지 여부, 그리고 알림 방식입니다. 바뀐 조건이나 타이밍을 저장하면 돌고 있던 상태 기계가 초기화됩니다.
alarm_delete 경로로 경보를 지웁니다. 발생 중인 알림은 먼저 지워집니다.
logic_folder_upsert 한 구역(Variables, Alarms, Actions, Triggers이며 많아야 세 단계)의 정리용 폴더를 만들거나 이름을 바꾸거나 다시 놓습니다. Variables와 Alarms에서는 폴더 경로가 주소의 일부이므로, 이름 바꾸기와 옮기기는 그 아래의 모든 수식과 스크립트와 조건과 대시보드 바인딩을 고쳐 씁니다.
logic_folder_delete 폴더를 지웁니다. 그 안에 있던 것은 아무것도 없어지지 않습니다. 항목과 하위 폴더는 한 단계 위로 다시 놓이고 참조는 고쳐 쓰입니다. 옮겨 갈 자리에서 이름이 부딪히면 삭제가 거부됩니다.

Logic, 조작

이것들은 모두 하나뿐인 로직 대기열을 타고 출처 MCP로 기록됩니다.

도구 하는 일
variable_write 내부 값 변수에 값을 씁니다(출력 형식으로 맞추고, 유지 변수라면 유지합니다). 수식 변수는 계산되는 값이므로 쓰기를 거부합니다.
tag_write 쓸 수 있는 태그에 공학값을 씁니다. 태그의 변환 경로를 거꾸로 지나 장치 형식으로 맞춘 다음 설비에 씁니다. 읽기 전용 태그와 읽기 전용 드라이버는 이유와 함께 거부됩니다.
action_run 로직 대기열에서 액션 하나를 실행하고 그 결과와 걸린 시간을 돌려줍니다. 꺼진 액션은 돌지 않고 실패합니다.
alarm_ack 경보 하나를 확인합니다. 운전자의 응답이며, 기다리는 것이 없으면 아무 일도 하지 않습니다.
alarm_ack_all 응답을 기다리는 모든 경보를 로직 대기열 항목 하나로 확인하며, 전이마다 기록을 남깁니다.

서버, 읽기

도구 하는 일
server_status 내장 OPC UA 서버의 상태 건전성을 알립니다. 실행 상태, 가동 시간, 엔드포인트 URL, 접속해 있는 클라이언트 세션, 그리고 설정된 주소 공간의 크기입니다.

서버, 조작

도구 하는 일
server_start 내장 OPC UA 서버를 시작하며 지금의 구성을 올립니다. 이미 돌고 있으면 아무 일도 하지 않습니다.
server_stop 서버를 얌전히 멈춥니다. 장치 통신과 태그 읽기와 실시간 Logic 주소 공간이 다시 시작할 때까지 멈춥니다.
server_restart 멈춘 다음 시작하며 구성을 다시 올립니다. 여러 변경을 한 뒤에 하는 전체 다시 읽기입니다.
connector_refresh 실행 중인 서버를 설정된 장치에 맞추어 조금씩 조정합니다(더하고 빼고 다시 만듭니다). 전체 다시 시작 없이 변경을 적용하는 가벼운 방법입니다.
device_discover 드라이버의 장치 검색 스캔을 돌리고 후보를 그 태그와 함께 돌려주며 아무것도 저장하지 않습니다. 프로토콜이 실제 스캔을 지원하는 드라이버만 참여하고, 이미 있는 후보에는 그렇다는 표시가 붙습니다.

로그, 읽기

도구 하는 일
logs_read 프로그램 전체의 실시간 로그 흐름을(Events 콘솔에 나오는 그것입니다) 최소 심각도(Debug/Information/Warning/Error이며 기본값은 Information), 영역(App/Server/Connector/Logic/Process/Dashboard/Agent/Licensing), 구성 요소, 그리고 맥락 문자열로 걸러 읽습니다. 가장 새로운 것부터 돌려줍니다(기본값 100, 최대 500). 에이전트의 조작은 Agent 영역 아래에 기록됩니다.
event_history_read 다시 시작해도 남는 오래가는 운영 이벤트 시간선을 읽습니다. 경보 전이, 발생 기록 전이, 인터록 전이입니다. 갈래(Alarm/Occurrence/Interlock), 양 끝을 포함한 UTC 기간, 그리고 수준(경보 우선순위, 발생 기록 심각도, 인터록 전이)으로 거릅니다. 가장 새로운 것부터이며 기본값 100, 최대 500입니다. 엄격하게 읽기 전용입니다. 어떤 것도 기록 항목을 비우거나 지울 수 없습니다.

Process, 읽기

도구 하는 일
process_models Process 모델을 통째로 나열합니다. 채널, 공유 묶음, 배선이 풀린 유닛과 그 실행 상태, 절차, 패널, 레시피, 판정, 발생 기록, 그리고 전역 보고서 템플릿 라이브러리입니다. 에이전트가 무엇을 시작하기 전에 읽는 지도입니다.
process_runs 실행을 최근 것부터 나열합니다. id, 이름, 상태, 종합 판정, 무엇이 돌았는지, 누가 시작했는지(스테이션/사용자/자동화/에이전트), 타이밍과 사이클 진행입니다. 진행 중인 실행으로 좁힐 수 있고 개수 상한을 둘 수 있습니다(기본값 50).
process_run id로 실행 하나의 얼어붙은 기록 전체를 읽습니다. 스냅숏, 메타데이터, 표본 수가 붙은 판정 기준, 발생 구간과 이벤트, 실제로 실행된 레시피 쓰기, 코멘트, 그리고 인쇄 시도가 붙은 얼어붙은 보고서와 라벨 산출물입니다. 원하면 데이터로그의 행 수와 시간 범위도 계산합니다.
unit_status 유닛의 실시간 상태를 알립니다. 실행 중인지(그리고 그 실행이 무엇인지)와 채널마다의 지금 공학값이며, 기록하지 않고 읽습니다.

Process, 구성

도구 하는 일
process_view_configure 모델의 패널 하나만 설정합니다. 그 옆에 그려지는 아이콘과, 그것이 View 페이지에 설지 여부입니다. Process 묶음의 그 밖의 것은 MCP로 쓸 수 없습니다. 나머지는 Process 페이지에서 편집합니다.

Process, 조작

에이전트가 시작하거나 끝내거나 코멘트를 남긴 실행은 행위자로 에이전트를 기록하며, 마침 시험대에 로그인해 있던 운전자를 기록하지 않습니다.

도구 하는 일
process_snapshot 절차 밖에서 유닛의 데이터로그 행 하나를 담습니다. 부를 때마다 판정 없이(종합 판정 None) 이미 완료된 새 즉시 실행이 이력에 만들어집니다.
process_evaluate 데이터로그 행 하나를 담고 판정으로 그것을 판단합니다. 완료된 즉시 실행을 만들고 그 종합 판정을 돌려줍니다.
process_recipe_apply 즉시 레시피를 Process 쓰기 깔때기와 신호원 잠금을 거쳐 유닛에 한 번 적용합니다. 설비에 명령하며 실행은 만들지 않습니다(쓰기는 기록됩니다). 시간형 레시피는 거부됩니다.
process_start 유닛에서 절차 실행을 시작하며, 절차의 메타데이터 칸을 담은 JSON 객체를 함께 건넵니다. 필수 메타데이터가 없거나 올바르지 않을 때, 유닛이 이미 실행 중일 때, 또는 공유 채널 잠금이 부딪힐 때 시작이 거부됩니다. 새 실행의 id를 돌려줍니다.
process_stop 돌고 있는 실행을 정지합니다. 마무리 묶음, 얼어붙은 이력 스냅숏, 계산된 종합 판정이 이루어집니다.
process_hold 실행의 시간 프로파일을 마지막 설정값에서 일시 정지합니다. 데이터로그는 계속 기록합니다.
process_resume 일시 정지된 실행의 시간 프로파일을 재개합니다.
process_abort 실행 중이거나 일시 정지된 실행을 중단합니다. 마무리가 돌고 스냅숏이 기록되며, 상태는 중단됨이 되고 종합 판정은 불합격이 됩니다.
process_comment 실행 파일에 시각이 찍힌 코멘트를 더합니다. 실행 중이면 시간선 메모이고, 끝난 뒤라면 실행 뒤 메모입니다.
process_report 끝난 실행의 PDF 보고서를 만들거나 다시 만들고 그 파일 경로를 돌려줍니다. 전역 라이브러리의 이름 있는 템플릿은 절차에 설정된 것을 덮어씁니다. 둘 다 없으면 모든 구획을 담는 기본 서식이 적용됩니다. 실행이 진행 중인 동안에는 거부됩니다.
process_run_delete 기록된 실행을 영구히 지웁니다. 이력 색인의 가리킴과 실행마다의 데이터베이스 파일입니다. 진행 중일 때는 거부되며 구성은 건드리지 않습니다.

대시보드, 구성

도구 하는 일
dashboard_list 대시보드를(또는 모델을 부르면 그 모델의 화면을) 나열합니다. 격자 크기, 폴더, 아이콘, 시작 표시, 역할별 보임, 그리고 위치와 층과 속성 JSON을 담은 모든 구성 요소, 게다가 저장된 모든 연결망입니다. 구성 요소 갈래 카탈로그도 갈래마다의 기본 크기와 기본 속성 묶음과 함께 돌려줍니다.
dashboard_upsert 이름으로 대시보드를 만들거나 고칩니다. 격자 크기(구성 요소를 떼어 놓게 될 축소는 거부됩니다), 시각화 목록의 폴더와 아이콘, 시작 표시, 전체 화면에서 상태 표시줄을 보일지, 그리고 역할별 보임입니다. 모델을 부르면 그 모델의 화면을 가리킵니다. 열려 있는 대시보드 페이지는 그 변경을 실시간으로 비춥니다.
dashboard_delete 이름으로 대시보드와 그 구성 요소를 지웁니다. 모델을 부르면 그 모델의 화면을 대신 지웁니다.
component_upsert 갈래로 구성 요소를 더하거나(달리 말하지 않으면 그 갈래의 기본 크기로 첫 빈 칸에 놓입니다) id로 하나를 고칩니다. 놓이는 자리는 격자 안이어야 하고, 겹침은 허용되며 z 층이 그리는 순서를 정합니다. 속성 JSON은 그 갈래의 형식 있는 묶음입니다. 모델을 부르면 그 모델의 화면을 가리키므로, 거기에서 만든 화면을 여기에서 배치할 수 있습니다.
component_delete id로 구성 요소를 없앱니다. 모델을 부르면 그 모델의 화면을 가리킵니다.
connection_upsert 심볼 연결점 둘을 형식 있는 연결망으로 잇습니다. 캔버스 편집기가 하는 것과 똑같이 심볼 카탈로그에서 종류와 역할과 방향을 풀어냅니다. 서로 다른 종류로 풀리는 끝은, 정의되지 않은 연결을 명시적으로 허락하지 않는 한 실패합니다. 이미 연결을 담고 있는 앵커는 거부됩니다. 모델을 부르면 그 모델의 화면을 가리킵니다.
connection_delete id와 예상하는 개정 번호로 연결망 하나를 없앱니다. 그래서 오래된 삭제가 더 새로운 편집을 덮어쓰는 대신 거부됩니다. 모델을 부르면 그 모델의 화면을 가리킵니다.

화면, 자동 조작

이 도구들은 실제 애플리케이션 창을 움직입니다. 에이전트가 흉내가 아니라 운전자가 보는 그 화면을 확인할 수 있도록 있는 것입니다. 조작은 살아 있는 셸로 보내지므로, 동작마다 ui_screenshot을 뒤따르게 해서 그 효과를 보는 것이 올바른 쓰임새이고, 모호하게 맞는 것은 짐작한 클릭 대신 후보 목록으로 돌아옵니다.

도구 하는 일
ui_state 셸의 상태를 알립니다. 활성 페이지, 쓸 수 있는 페이지, 테마, 창 크기와 보임 여부, 그리고 이 인스턴스가 화면을 제공하는 루프백 주소입니다. 무엇보다 먼저 부르는 자리 잡기 호출입니다.
ui_navigate 셸의 페이지를 어느 스테이션에서나 영어인 안정된 이름으로 활성화합니다: View, Process, Logic, Connector, Users, Validation, Events, Agent, Settings, Account. 스테이션 언어로 탐색 막대에 표시되는 이름표도 받아들입니다.
ui_screenshot 화면에 보이는 대로 창을 PNG 파일로 담고 그 절대 경로를 돌려줍니다. 창이 알림 영역에 감춰져 있으면 먼저 되돌립니다. 창 전체 대신 이름이 붙은 화면 영역 하나(고유하고 보이는 data-doc-region 영역)를 담을 수도 있고, 없거나 감춰졌거나 모호한 영역은 조용히 전체 담기로 물러서는 대신 보이는 영역을 나열하며 실패합니다.
ui_scroll 활성 페이지의 주 스크롤 영역을 맨 위나 맨 아래로, 또는 화면 단위로 스크롤하고 그 위치를 돌려주므로 긴 페이지를 훑을 수 있습니다.
ui_set_theme 테마를 적용합니다(시스템 설정 따름, 밝게, 어둡게). 제목 표시줄의 테마 메뉴와 똑같이 저장되므로, 예의 바른 에이전트라면 끝난 뒤 원래 값으로 되돌립니다.
ui_resize 되돌린 창의 크기를 장치 독립 단위로 바꾸며 창의 최솟값으로 붙습니다. 좁은 배치를 살펴볼 때 쓸모가 있습니다.
ui_click 글자가 맞는, 보이는 단추나 하이퍼링크나 확인란이나 스위치를 누릅니다. 확인란과 스위치는 그 칸 이름표로 찾고, 결과는 어느 상태로 놓였는지 알립니다. 모호하면 하나를 고르는 대신 후보를 돌려줍니다.
ui_set_text 칸 이름표로 찾은 텍스트 상자에 값을 쓰며, 입력할 때처럼 바인딩을 확정합니다.
ui_select 보이는 글자로 항목을 고릅니다. 빗금으로 나눈 경로는 트리를 따라가며 지나는 길을 펼치고, 마디 하나짜리는 지금 페이지의 목록과 탭과 콤보 상자 항목과 표의 행에도 맞습니다.

백업, 관리

도구 하는 일
backup_create 구성 데이터베이스의 온라인 스냅숏을 백업 폴더에 만들며, 원하면 메모를 붙입니다. 기록된 실행은 구성 밖에 있으므로 백업이나 복원이 결코 건드리지 않습니다.
backup_list 구성 백업을 나열하고(파일 이름, 만든 시각, 크기, 메모) 이미 예약된 복원이 있으면 함께 보여 줍니다.

백업 삭제 도구는 일부러 두지 않았습니다. 얼마나 오래 보관할지는 운전자만 정하며, 백업 페이지에서 정합니다.

백업, 복원

도구 하는 일
backup_restore 다음 애플리케이션 시작에서 백업이 지금의 구성을 대신하도록 예약합니다. 돌고 있는 앱에서는 아무것도 바뀌지 않고 이 도구가 앱을 다시 시작하지도 않습니다. 대신되는 구성은 먼저 저절로 스냅숏으로 남으며, 운전자는 다시 시작하기 전까지 설정에서 예약된 복원을 취소할 수 있습니다. 기록이 진행 중인 동안에는 거부됩니다.

설정, 관리

도구 하는 일
settings_read 스테이션의 표시와 수명 주기 기본 설정을 읽습니다. 날짜와 시간과 숫자 형식, 소수 자릿수, 테마, 닫을 때 알림 영역으로 보내기와 충돌 보고서 표시입니다.
localization_set 표시 기본 설정을 고칩니다(일부만 바꾸며 빠뜨린 매개변수는 그대로입니다). 표시에만 적용됩니다. 저장과 드라이버 입출력과 기록은 언제나 문화권과 무관한 형식을 씁니다.
asset_list 사용자 자산(이미지, 아이콘, 색)을 id와 값과 경로와 함께 나열합니다.
asset_import 로컬 파일 경로의 PNG나 JPG를 앱이 가진 자산 라이브러리로 가져오고 새 자산 id를 돌려줍니다. 바이트를 복사하므로 원본 파일은 그 뒤에 옮겨도 됩니다.
symbol_validate 인라인 심볼 내용(원시 SVG나 v2 패키지)을 아무것도 저장하지 않고 검사합니다. 실제 가져오기를 그대로 한 번 돌려 보는 것이며, 오류와 정화기 경고와 무엇을 알아보았는지의 요약을 돌려줍니다. 이 도구의 설명에는 옮길 수 있는 심볼 규약 전체가 담겨 있습니다.
symbol_import 인라인 심볼 내용을 새 사용자 심볼 자산으로 가져오고 그 id와 user:<guid> 참조를 돌려줍니다. 언제나 새 자산을 만들며, 부딪히는 이름에는 꼬리가 저절로 붙습니다.