문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
comfilehmi:webapi:index [2021/07/26 17:54] Comfile Technology [표] |
comfilehmi:webapi:index [2023/07/26 10:17] Comfile Technology [6) 웹브라우저 주소창에서 사용시 제약 사항] |
||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====== Web API (CHC 시리즈/HDM-C070RL & 펌웨어 v3.49 이상 지원)====== | + | ====== Web API (CHC 시리즈 & 펌웨어 v3.49 이상 지원)====== |
- | Web API 기능은 HTTP 프로토콜을 사용하여 원격으로 HMI(서버 역할)와 통신하면서 여러가지 처리를 할 수 있는 기능입니다. (HMI 제어하기, HMI 변수나 메모리 값 등을 읽어오기, HMI에 있는 파일을 웹브라우저로 다운로드, 실행하기, 웹브라우저에 실시간 동작 UI 구성하기 등) | + | Web API 기능은 HTTP 프로토콜을 사용하여 원격으로 HMI(서버 역할)와 통신하면서 여러가지 처리를 할 수 있는 기능입니다. (HMI 제어하기, //내부 변수//나 //내부 메모리// 값 등을 읽어오기, HMI에 있는 파일을 웹브라우저로 다운로드, 실행하기, 웹브라우저에 실시간 동작 UI 구성하기 등) |
기존의 웹브라우저(예: 크롬)를 사용할 수도 있고 다른 HMI가 클라이언트가 되어 사용할 수도 있습니다('액션>HTTP 요청') | 기존의 웹브라우저(예: 크롬)를 사용할 수도 있고 다른 HMI가 클라이언트가 되어 사용할 수도 있습니다('액션>HTTP 요청') | ||
줄 29: | 줄 29: | ||
(1) 'script' | (1) 'script' | ||
- | HMI의 [액션>스크립트]에서 사용하는 스크립트를 사용합니다. HMI 변수, 문자열 변수, 함수 등을 사용할 수 있으며 세미콜론(';')으로 연결하여 스크립트를 길게 작성할 수 있습니다. | + | HMI의 [액션>스크립트]에서 사용하는 스크립트를 사용합니다. //내부 변수//, //내부 문자열 변수//, 함수 등을 사용할 수 있으며 세미콜론(';')으로 연결하여 스크립트를 길게 작성할 수 있습니다. |
(2) 'open' | (2) 'open' | ||
줄 61: | 줄 61: | ||
'#' -> '%23' \\ '%' -> '%25' \\ '\' -> '%5C' (파일 경로일 경우 간단하게 '/'로도 치환 가능) | '#' -> '%23' \\ '%' -> '%25' \\ '\' -> '%5C' (파일 경로일 경우 간단하게 '/'로도 치환 가능) | ||
- | 예1) 192.168.0.20:9138/script/<html></html>/a$="3 나누기 5는 백분율로 60<html><font color="#ff0000">%25</font></html>입니다.";vars_to_json("$a") \\ 예2) 192.168.0.20:9138/open/<html></html>/storage card<html><font color="#ff0000">/</font></html>web_hmi.html \\ 예3) 192.168.0.20:9138/download/<html></html>/storage card<html><font color="#ff0000">/</font>sub<font color="#ff0000">/</font></html>data.bin \\ 예4) 192.168.0.20:9138/script/filenames_to_json("storage card<html><font color="#ff0000">/</font></html>dir") | + | 예1) 192.168.0.20:9138/script/<html></html>/$a="3 나누기 5는 백분율로 60<html><font color="#ff0000">%25</font></html>입니다.";vars_to_json("$a") \\ 예2) 192.168.0.20:9138/open/<html></html>/storage card<html><font color="#ff0000">/</font></html>web_hmi.html \\ 예3) 192.168.0.20:9138/download/<html></html>/storage card<html><font color="#ff0000">/</font>sub<font color="#ff0000">/</font></html>data.bin \\ 예4) 192.168.0.20:9138/script/<html></html>/filenames_to_json("storage card<html><font color="#ff0000">/</font></html>dir") |
===== 2. 응답 처리하는 방법 ===== | ===== 2. 응답 처리하는 방법 ===== | ||
줄 69: | 줄 69: | ||
==== 1) HMI 클라이언트에서 응답 처리하는 방법 ==== | ==== 1) HMI 클라이언트에서 응답 처리하는 방법 ==== | ||
- | HMI 클라이언트는 들어오는 JSON 응답을 자체적으로 해석할 수 있는 능력이 있으므로 별도로 JSON에 관한 처리를 안하더라도 자동으로 처리됩니다. 원격지 HMI 변수값이나 HMI 메모리값이 JSON 형식으로 수신되면 HMI 클라이언트는 그 내용을 그대로 자신에게 복사합니다.(같은 변수명, 같은 메모리 번지로) \\ | + | HMI 클라이언트는 들어오는 JSON 응답을 자체적으로 해석할 수 있는 능력이 있으므로 별도로 JSON에 관한 처리를 안하더라도 자동으로 처리됩니다. 원격지 //내부 변수//값이나 //내부 메모리//값이 JSON 형식으로 수신되면 HMI 클라이언트는 그 내용을 그대로 자신에게 복사합니다.(같은 변수명, 같은 메모리 번지로) \\ |
도착한 JSON 응답이 자동 처리된 후 실행할 사용자 액션을 지정할 수 있습니다. \\ | 도착한 JSON 응답이 자동 처리된 후 실행할 사용자 액션을 지정할 수 있습니다. \\ | ||
- | JSON 응답에는 변수값이나 메모리값 등의 정보 이외에도 성공했는지 여부, 에러일 경우 에러코드와 에러메시지 정보도 담길 수 있습니다. 가장 최근에 응답 온 JSON 관련해서, 성공여부는 last_json_result() 함수, 에러 코드는 last_json_error_code() 함수, 에러메시지는 last_json_error_message() 함수를 사용하여 알아낼 수 있습니다. \\ | + | JSON 응답에는 변수값이나 메모리값 등의 정보 이외에도 성공했는지 여부, 에러일 경우 에러코드와 에러메시지 정보도 담길 수 있습니다. 가장 최근에 응답 온 JSON 관련해서, 성공여부는 last_json_result() 함수, 에러 코드는 last_json_error_code() 함수, 에러메시지는 last_json_error_message() 함수를 사용하여 알아낼 수 있습니다. 이 함수들에 대한 자세한 설명은 다음 링크를 참고하세요 : [[http://www.comfilewiki.co.kr/ko/doku.php?id=comfilehmi:hmieditor_function:index#web_api_%EA%B4%80%EB%A0%A8_%ED%95%A8%EC%88%98_%EA%B3%A0%EA%B8%89_%EA%B8%B0%EB%8A%A5_chc_hdm-c070rl_%EB%98%90%EB%8A%94_%EA%B7%B8_%EC%83%81%EC%9C%84_%EB%AA%A8%EB%8D%B8%EC%97%90%EC%84%9C%EB%A7%8C_%EC%A7%80%EC%9B%90|WebAPI 관련 함수]] |
- | 이 함수들에 대한 자세한 설명과 구체적인 전체 에러 코드와 에러 메세지 목록은 시스템 함수 설명 편을 참고하세요. | + | |
==== 2) 웹브라우저에서 응답 처리하는 방법 (HTML / javascript / JSON에 대한 이해 필요) ==== | ==== 2) 웹브라우저에서 응답 처리하는 방법 (HTML / javascript / JSON에 대한 이해 필요) ==== | ||
줄 83: | 줄 82: | ||
고급 예제) 웹브라우저의 슬라이더로 원격지 HMI에 있는 변수 a의 값을 쓰고, 다시 그 값을 불러 와서 웹브라우저의 게이지 그래프에 표시하는 예제. 슬라이더의 값이 정한 범위(0~100)를 넘어가면 게이지가 빨간색으로 변합니다. \\ | 고급 예제) 웹브라우저의 슬라이더로 원격지 HMI에 있는 변수 a의 값을 쓰고, 다시 그 값을 불러 와서 웹브라우저의 게이지 그래프에 표시하는 예제. 슬라이더의 값이 정한 범위(0~100)를 넘어가면 게이지가 빨간색으로 변합니다. \\ | ||
{{ :comfilehmi:webapi:sample2.htm | 고급 예제 HTML 파일 다운로드 받기}} \\ | {{ :comfilehmi:webapi:sample2.htm | 고급 예제 HTML 파일 다운로드 받기}} \\ | ||
- | {{:comfilehmi:webapi:sample2.png|}} | + | {{:comfilehmi:webapi:sample2.png|}}{{:comfilehmi:webapi:sample2b.png|}} |
<예제 테스트 절차> \\ | <예제 테스트 절차> \\ | ||
줄 94: | 줄 93: | ||
===== 3. JSON 응답 형식 ===== | ===== 3. JSON 응답 형식 ===== | ||
- | ^ 필드명 ^ 타입 | 내용 | | + | ^ 필드명 ^ 타입 | 내용 | |
- | | success | boolean | 성공 여부. true이면 성공. false이면 실패 | | + | | success | boolean | 성공 여부. true이면 성공. false이면 실패 | |
- | | vars.{HMI 변수명} | number | 요청한 원격지 HMI 변수의 값 | | + | | vars.{내부 변수명} | number | vars_to_json() 함수로 요청한 원격지 //내부 변수//의 값. | |
- | | vars.{HMI 문자열 변수명} | string | 요청한 원격지 HMI 문자열 변수의 값 | | + | | vars.{내부 문자열 변수명} | string | vars_to_json() 함수로 요청한 원격지 //내부 문자열 변수//의 값. \\ //내부 문자열 변수//명은 '$'로 시작함. | |
- | | mem.{HMI 메모리 시작 번지} | array | 요청한 원격지 HMI 메모리의 주소 연속적인 값들 | | + | | mem.{내부 메모리 시작 번지} | array | mem_to_json() 함수로 요청한 원격지 내부 메모리의 주소 연속적인 값들 | |
- | | error.code | number | 오류 코드 | | + | | error.code | number | 오류 코드 | |
- | | error.message | string | 오류 메세지. 언어는 프로젝트 기본 언어 설정에 따라 | | + | | error.message | string | 오류 메세지. 언어는 프로젝트 기본 언어 설정에 따라 | |
+ | | filenames | array | filenames_to_json() 함수로 요청한 원격지 HMI 특정 폴더 내의 파일명 목록 | | ||
+ | | dirnames | array | dirnames_to_json() 함수로 요청한 원격지 HMI 특정 폴더 내의 폴더명 목록 | | ||
+ | |||
+ | <code> | ||
+ | 예1) 성공했을 경우 | ||
+ | { | ||
+ | "success": true, | ||
+ | "vars": { | ||
+ | "temperature" : 16.7, | ||
+ | "$city" : "Seoul" | ||
+ | }, | ||
+ | "mem" : { | ||
+ | "20" : [31,43,21] | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 예2) 실패했을 경우 | ||
+ | { | ||
+ | "success" : false, | ||
+ | "error" : { | ||
+ | "code" : 4011, | ||
+ | "message" : "Command syntax error." | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
+ | Web API 에러 코드와 에러 메세지 | ||
+ | |||
+ | ^ 오류 코드 ^ 오류 메세지 ^ | ||
+ | | 8047 | 응답받은 JSON의 형식이 잘못되었습니다. | | ||
+ | | 4011 | 커맨드의 구문 오류입니다. 다음과 같이 사용하세요 : 서버 주소:포트번호/커맨드명/비밀번호/커맨드 내용 | | ||
+ | | 4010 | 알 수 없는 커맨드입니다. | | ||
+ | | 3010 | Web API 실행을 지원하지 않는 기기입니다. 지원되는 기기 예: CHC, HDM-C070RL | | ||
+ | | 3009 | 현재 프로젝트 실행 모드가 아닌 HMI 기기에 접속을 시도했습니다. | | ||
+ | | 3012 | 원격제어 비밀번호가 맞지 않습니다. | | ||
+ | | 3013 | 스크립트의 구문 오류입니다. | | ||
+ | |||
+ | [[comfilehmi:index|ComfileHMI]] |