시스템 함수
ComfileHMI Editor에서 사용할 수 있는 함수들입니다. 수식의 일부로 사용할 수 있습니다.
또는 스크립트에서 사용할 수 있습니다.('이벤트와 액션'의 하위 카테고리 중에서 액션>스크립트)
1. 내부 메모리
내부 메모리란 HMI기기 내부의 특정 메모리영역입니다. 휘발성이며, 전원이 꺼지면 지워집니다.
최초상태 번지는 0부터 1023까지 사용가능하며 0으로 채워져 있습니다. set_mem_size함수로 용량 확장이 가능합니다.
예: set_mem_size(20000) - 20000개까지 사용가능하도록 확장시킴. 최대 1,000,000(백만)개까지 설정가능. 예를 들어 [이벤트와 액션>전역 이벤트>프로젝트 시작 시>액션>스크립트]에서 set_mem_size(5000) 라고 지정하면 프로젝트가 시작할 때 메모리를 5000개로 늘려 놓고 시작할 수 있습니다. 확장후 데이터는 0으로 다시 채워집니다. 각 번지에 64비트 정수및 실수형 수치를 저장할 수 있습니다.
다음과 같이 연속된 번지에 계속 값을 기록할 수도 있습니다.
2. 기본 수학함수
인수가 1개인 함수입니다.
인수가 2개인 함수입니다.
인수가 여러개인 함수입니다.
scale(입력값, 입력 최소값, 입력 최대값, 출력 최소값, 출력 최대값)
3. 시스템 함수
시스템과 관련된 함수입니다. 인수가 없는 함수들입니다.
인수가 있는 함수들입니다.
verify_developer_key(개발자 키) : HMI 기기에 등록된 개발자 키의 일치 여부를 조사하여 결과를 반환합니다. 검사 결과가 일치할 경우 1을, 불일치할 경우 0을 반환합니다. HMI의 [런타임 설정>개발자 키 등록] 메뉴를 통해 HMI기기에 개발자 키를 미리 등록해놓을 수 있습니다. 예를 들어 프로젝트 동작중에 중요한 화면 진입시에 verify_developer_key(1234)==0 일 경우 에러 표시 화면으로 이동하게끔 작화를 할 수 있습니다. 이 기능은 개발자가 자신이 지정한 특정 기기에서만 자신의 프로젝트가 동작하게끔 하고 싶을 때 유용하게 쓸 수 있습니다. 시뮬레이터에서 이 함수의 지원 여부는 런타임 설정에 따라 결정되고 PC 런타임에서는 USB 동글에 들어 있는 개발자 키 값을 체크합니다. (시뮬레이터나 PC런타임 프로그램을 실행시켜서 개발자 키를 USB 동글에 직접 기록할 수 있습니다.)
set_data_processing_period(처리 주기 ms) : HMI 기기의 데이터 처리 주기를 조정하여 결과적으로 CPU 점유율을 낮춥니다. 데이터 처리 주기란 화면 갱신이나 통신 처리를 제외한 다른 모든 처리를 하는 주기를 말하며(1/1000초 단위) 이벤트나 액션의 갯수가 많아지는 등의 이유로 CPU점유율이 높아진 경우 이 함수를 유용하게 사용할 수 있습니다. 일반적으로 프로젝트 시작시에 한번만 호출하면 되며 상황에 따라서 유동적으로 부하를 조절하고 싶을 경우 프로젝트 중간에 사용할 수도 있습니다. CPU 점유율이 높더라도 개의치 않고 최대의 성능을 내고 싶을 경우 파라미터를 0으로 주면 되나, 50 미만의 값은 주의를 요하며 CPU 점유율이 100% 가까이 될 경우 이 값을 대략 100ms 정도로 하고 통신 간격을 30ms 정도로 하면 효과를 볼 수도 있습니다. 이 값은 펌웨어 v3.87부터는 디폴트값이 50이며 그보다 낮은 버전에서는 0입니다.
set_field_resource_color(리소스 번호,R,G,B) : 색상 필드 리소스의 색상을 실시간으로 변경할 수 있습니다. (주의: 에디터에서 미리 정의한 색상만 변경할 수 있습니다.) 예) set_field_resource_color(3,255,0,0) ⇐= 3번 색상 리소스를 적색으로 변경합니다.
4. 연산/비교/조건 분기 함수
float_to_bytes(값,"변수명1","변수명2","변수명3","변수명4") : 특정 값을 float(32비트) 형식으로 변환한 후, 각각의 구성 바이트를 얻어냅니다. 변수명1은 최하위 바이트(리틀 엔디안 방식일 경우의 첫 바이트를 뜻함)이며 변수명4는 최상위 바이트를 뜻합니다. 변수명은 대소문자를 구분하며 반드시 따옴표로 감싸져야 합니다. 예) float_to_bytes(3.14+k,"a","b","c","d")
bytes_to_float("변수명1","변수명2","변수명3","변수명4") : 4개의 변수에 들어있는 각각의 바이트값으로부터 float 값을 얻어냅니다. 변수명1은 최하위 바이트(리틀 엔디안 방식일 경우의 첫 바이트를 뜻함)이며 변수명4는 최상위 바이트를 뜻합니다. 변수명은 대소문자를 구분하며 반드시 따옴표로 감싸져야 합니다. 예) float_to_bytes(3.14,"a","b","c","d");result=bytes_to_float("a","b","c","d") =⇒ result는 3.14의 값을 다시 갖게 됩니다.
bit("변수명" 또는 수식, 비트번호) : 특정 변수(또는 수식)의 특정 비트가 켜졌으면 1, 꺼졌으면 0을 반환합니다. 변수명은 따옴표로 감싸져야 하며 비트번호는 가장 낮은 비트(LSB)가 0입니다. 비트 갯수는 32개까지 지원합니다.
(예1) switch=bit("a",0)
(예2) switch=bit(a+3,1)
set_bit("변수명", 비트번호, 비트 플래그 =1 ) : 특정 변수의 특정 비트를 켜거나 끕니다. 비트 플래그가 0이면 끄고 0이 아니면 켭니다. 변수명은 따옴표로 감싸져야하며 비트번호는 가장 낮은 비트(LSB)가 0입니다. 비트 플래그는 생략할 수 있으며 생략시 값은 1입니다. 비트 갯수는 32개까지 지원합니다.
(예) set_bit("b",31,1);
membit(번지, 비트번호) : 특정 번지의 내부 메모리 값의 특정 비트가 켜졌으면 1, 꺼졌으면 0을 반환합니다. 비트번호는 가장 낮은 비트(LSB)가 0입니다. 비트 갯수는 32개까지 지원합니다.
(예) switch=membit(50,3)
set_membit(번지, 비트번호, 비트 플래그 =1) : 특정 번지의 내부 메모리 값의 특정 비트를 켜거나 끕니다. 비트 플래그가 0이면 끄고 0이 아니면 켭니다. 비트번호는 가장 낮은 비트(LSB)가 0입니다. 비트 플래그는 생략할 수 있으며 생략시 값은 1입니다. 비트 갯수는 32개까지 지원합니다.
(예1) set_membit(50,15) (예2) set_membit(50,3,0)
select_if(조건식,값1,값2) : 조건식이 만족할 경우 값1을, 만족하지 않을 경우 값2를 반환합니다.
(예) a = select_if(b == 0, c, d)
b가 0일경우 c의 값을 a로 저장하고, 아닐경우 d의 값을 a에 저장합니다. (a,b,c,d는 모두 내부 변수 입니다.)
값과 반환값이 문자열일 수도 있습니다.
(예) $temp_state=select_if(temp>100,"High","Low")
select_case(디폴트 결과값, 조건식1, 결과값1, 조건식2, 결과값2, 조건식3, 결과값3, …)
순차적으로 검사하여,
조건식1을 만족하면 결과값1을 반환하고
조건식2를 만족하면 결과값2를 반환하고
조건식3을 만족하면 결과값3을 반환하고
이런 방식으로 반복하며, 아무것도 만족하지 못하면 ‘디폴트 결과값’을 반환합니다.
(‘디폴트 결과값’, 반환값, 결과값1, 결과값2, 결과값3, …은 동시에 문자열일 수 있습니다.)
(예1) select_case(1000, a>5, 100, $b==”APPLE”, 200)
⇒ a가 5보다 크다면 100을 반환하고, $b라는 내부 문자열 변수값이 “APPLE”이라면 200을 반환하고, 어느 경우도 해당하지 않는다면 1000을 반환합니다.
(예2) select_case(“NORMAL”, temp>100, ”HOT”, temp<0, ”ICE”)
⇒ temp가 100보다 크다면 “HOT”를 반환하고, temp가 0보다 작다면 “ICE”를 반환하고, 어느 경우도 해당하지 않는다면 “NORMAL”을 반환합니다.
select_by_key(디폴트 결과값, 키 제시값, 키1, 결과값1, 키2, 결과값2, 키3, 결과값3, …)
키 제시값이 키1과 같으면 결과값1을 반환하고
키 제시값이 키2과 같으면 결과값2를 반환하고
키 제시값이 키3과 같으면 결과값3을 반환하고
이런 방식으로 반복하며, 아무것도 해당되지 않으면 디폴트 결과값을 반환합니다.
(디폴트 결과값, 반환값, 결과값1, 결과값2, 결과값3, …은 동시에 문자열일 수 있으며, 키 제시값과 키1, 키2, 키3, … 가 동시에 문자열일 수 있습니다.)
(예1) select_by_key(-1,a+b,10,100, 20,200, 30,300)
⇒ a+b가 10이면 100을 반환하고, 20이면 200을 반환하고, 30이면300을 반환하며 아무것도 해당하지 않으면 -1을 반환합니다.
(예2) select_by_key(0, $a+$b,”ONE”,1 ,”TWO”,2 , “THREE”,3)
⇒ $a+$b가 “ONE”이면 1을 반환하고, “TWO”이면 2를 반환하고, “THREE”이면 3을 반환하며 아무것도 해당하지 않으면 0을 반환합니다.
(예3) $a=select_by_key(“NOTHING”, a+b,1,”ONE” ,2,”TWO”, 3,“THREE”)
⇒ a+b가 1이면 “ONE”을 반환하고, 2이면 “TWO”를 반환하고, 3이면 “THREE”를 반환하며 아무것도 해당하지 않으면 “NOTHING”을 반환합니다.
select_by_index(디폴트 결과값, 인덱스 제시값, 시작 인덱스, 결과값1, 결과값2, 결과값3, …)
인덱스 제시값이 시작 인덱스와 같으면 결과값1을 반환하고
인덱스 제시값이 시작 인덱스+1와 같으면 결과값2를 반환하고
인덱스 제시값이 시작 인덱스+2와 같으면 결과값3을 반환하고
이런 방식으로 반복하며, 아무것도 해당되지 않으면 디폴트 결과값을 반환합니다.
(디폴트 결과값, 반환값, 결과값1, 결과값2, 결과값3, …은 동시에 문자열일 수 있습니다.)
(예1) var = select_by_index(-1,a,5,100,200,300)
⇒ a가 5이면 100을 반환하고, 6이면 200을 반환하고, 7이면 300을 반환하고 그 외의 경우는 -1을 반환합니다.
(예2) $result = select_by_index(“NOTHING”,a,5,”A”,”B”,”C”)
⇒ a가 5이면 “A”를 반환하고, 6이면 “B”를 반환하고, 7이면 “C”를 반환하고 그 외의 경우는 “NOTHING”을 반환합니다.
5. 액션 파라미터 관련 함수
액션추가에서 <사용자 액션 그룹 실행>의 <고급옵션>을 활성화시키면 <액션 파라미터>와 <보조 액션 파라미터>라는 항목이 나옵니다.
여기에 어떤 숫자를 넣으면, 이 숫자를 다음 함수로 읽어올 수 있습니다.
6. RTC (리얼타임클록) 관련 함수
인수가 없고, 리턴값이 있는 함수들입니다.
인수가 1개이고 리턴값이 없는 함수들입니다.
인수가 2개 이상인 함수들입니다.
7. 문자열 관련 함수
find_text("대상 문자열","찾는 문자열") : 문자열 내에서 문자열을 찾습니다. 찾으면 0 이상의 찾은 위치값을 반환하고, 없으면 -1을 반환합니다.
(예) find_text("abcde","cd") 는 2를 반환합니다.
replace_text("문자열 변수명", "찾는 문자열", "대체 문자열") : 특정 문자열 변수 값 내에서 특정 문자열을 다른 문자열로 변경합니다. 문자열 변수명은 반드시 따옴표로 감싸야 하고 '$' 기호는 생략합니다.
(예) $var="I eat lunch.";replace_text("var","lunch","dinner")
text_starts_with("대상 문자열", "찾는 문자열", 대소문자 무시 옵션) : 문자열이 특정 문자열로 시작하는지 검사합니다. 첫번째 파라미터 문자열이 두번째 파라미터 문자열로 시작한다면 1을 반환하고 그렇지 않으면 0을 반환합니다. 대소문자를 무시하려면 세번째 파라미터를 1로 지정하고 그렇지 않고 대소문자를 정확히 가려서 검사하려면 0으로 지정합니다. 세번째 인자는 생략할 수 있으며 생략시 기본값은 0(대소문자 구별)입니다.
(예) text_starts_with("BREAKFAST","BREAK") - - - 1을 반환합니다.
(예) text_starts_with("BREAKFAST","break",1) - - - 1을 반환합니다.
(예) text_starts_with("BREAKFAST","break",0) - - - 0을 반환합니다.
text_ends_with("대상 문자열", "찾는 문자열", 대소문자 무시 옵션) : 문자열이 특정 문자열로 끝나는지 검사합니다. 첫번째 파라미터 문자열이 두번째 파라미터 문자열로 끝난다면 1을 반환하고 그렇지 않으면 0을 반환합니다. 대소문자를 무시하려면 세번째 파라미터를 1로 지정하고 그렇지 않고 대소문자를 정확히 가려서 검사하려면 0으로 지정합니다. 세번째 인자는 생략할 수 있으며 생략시 기본값은 0(대소문자 구별)입니다.
(예) text_ends_with("LUNCH","CH") - - - 1을 반환합니다.
(예) text_ends_with("LUNCH","ch",1) - - - 1을 반환합니다.
(예) text_ends_with("LUNCH","ch",0) - - - 0을 반환합니다.
(예) $suffix="CH";result=text_ends_with("LUNCH",$suffix);
<'텍스트 메모리' 관련 함수들>
텍스트 메모리는 HMI 기기 내부의 특정 문자열 영역입니다. 전원이 꺼지면 내용이 지워집니다. 내부 메모리와 흡사하나 실수가 아닌 문자열을 저장하는 점이 다릅니다. 최초상태 번지는 0부터 1023까지 사용가능하며 처음에는 빈 문자열로 채워져 있습니다. set_tmem_size함수로 용량 확장이 가능합니다.
set_tmem(번지,"문자열값") : 텍스트 메모리 특정번지에 문자열을 기록합니다. 연속적으로 문자열을 기록하려면 쉼표로 연결하여 파라미터를 늘릴 수 있습니다. 예) set_tmem(10,"one","two","three")
text_split("문자열","구분자",결과물을 담을 시작 번지,결과물 최대 갯수) : 문자열을 특정 구분자로 구분하여 나누어 그 결과를 텍스트 메모리에 입력합니다. 결과물의 최대 갯수를 지정할 수 있고 생략 가능합니다. 예) text_split("aa#b#c#d"),"#",10,3) 라고 실행하면 10번지에 "aa", 11번지에 "b", 12번지에 "c"가 기록됩니다.
text_merge(시작 번지,갯수,"구분자") : 텍스트 메모리에 들어 있는 문자열들을 특정 구분자로 연결하여 하나의 문자열로 만들어서 반환합니다. 예) 텍스트 메모리 10번지에 "aa", 11번지에 "b", 12번지에 'c'가 들어 있을 때 text_merge(10,3,"-")를 실행하면 "aa-b-c"라는 문자열을 반환합니다.
8. 파일 관련 함수
text_to_file("문자열", "파일 경로") : 문자열과 파일 경로를 넣으면 문자열의 내용을 파일에 기록함(UTF-16LE 유니코드 형식이며 FF FE로 시작함). 파라미터로 문자열 변수 사용 가능. 성공할 경우 1을, 실패할 경우 0을 반환합니다.
(예) 스크립트에 다음과 같이 씁니다: text_to_file($content,"storage card\new.txt")
base64_to_file("BASE64 형식의 문자열","저장할 파일 경로",저장 옵션 = 0) : BASE64 형식으로 된 바이너리 데이터를 해석하여 특정 파일에 기록합니다. 저장할 데이터와 경로에 문자형 변수('$'로 시작)를 사용할 수 있습니다. 기존 파일이 존재할 경우 저장 옵션이 0이면 덮어쓰고 0이 아니면 뒤에 이어서 기록합니다. 기본값은 0입니다.(덮어쓰기). 성공하면 1을, 실패하면 0을 반환합니다.
(예) base64_to_file($base64_data,"storage card\myfile.bin",1)
9. 위젯 관련 함수
trendgraph_stop("트렌드 그래프의 심볼명",데이터 삭제 플래그 =0) : 특정 심볼명을 가진 트렌드 그래프의 데이터 수집 동작을 중지시킵니다. 두번째 파라미터가 0이 아닐 경우는 수집했던 데이터를 모두 지운 상태에서 멈추고, 0일 경우는 수집한 데이터를 그대로 보여주는 상태에서 멈춥니다. 이 파라미터는 생략할 수 있으며 생략할 경우 기본값은 0(데이터 삭제 안 함)입니다. 심볼명은 중복될 수 있으며 해당 심볼명을 가진 모든 트렌드그래프에 적용됩니다.
(예1) trendgraph_stop("my_graph")
(예2) trendgraph_stop("my_graph",1)
10. 프로토콜 관련 함수
enable_modbus_batching(활성화 여부 플래그 =1) : Modbus 프로토콜 사용시 여러개의 주소값을 읽을 경우 인접한 주소에 대해서 자동으로 묶어서 처리할지 여부를 결정합니다. 이 함수를 호출하지 않아도 이 기능은 기본적으로 활성화되어 있으며 패킷 전송의 효율성을 위해서 활성화하는 것을 권장하지만, 한번에 주소 1개씩 밖에 받지 못하는 등 특수한 외부장치의 제한된 상황이 있는 경우 'enable_modbus_batching(0)'과 같이 함수 호출을 하여 호환되게 할 수 있습니다. 일반적인 대부분의 경우에 이 함수는 호출할 필요가 없습니다.
11. Web API 관련 함수 (고급 기능, CHC 또는 그 상위 모델에서만 지원)
다음 함수들은 반드시 HTTP 요청을 통해('script' 커맨드 사용) 실행되어져야 합니다.
(예) 192.168.0.99:9138/script/1234/a=3;vars_to_json("a") ←- 이와 같은 내용을 웹브라우저 주소창에 입력하거나 HMI의 [액션>'HTTP 요청'] 에서 실행하면 내부 변수 'a'에 대한 내용을 응답으로 받을 수 있습니다. ('1234'는 원격제어 비밀번호가 1234일 경우의 예시이며 없을 경우 생략 가능.)
mem_to_json(내부 메모리 시작번지, 번지 갯수, 소숫자리수 =6) : 연속된 번지에 대한 내부 메모리 값을 JSON 포맷으로 응답해줍니다. 소숫자리수는 소숫자리가 있을 경우 최대 몇개의 자리까지 표시할지 결정하며, 생략 할 수 있습니다(기본값은 6)
(예) mem_to_json(10,3) ←- 내부 메모리 10,11,12에 들어 있는 3개의 값을 응답해줌.
last_json_result() : 가장 최근 수신한 json 응답을 조회합니다. 커맨드(script, open, download) 실행에 대한 성공 여부를 나타내며 1일 경우 성공, 0일 경우 실패를 의미하며 해당되는 json의 키는 "success"입니다. 예를 들어 script 커맨드의 내용 중에 문법적 오류가 있거나 원격 비밀번호가 일치하지 않거나 download 시도시 없는 파일의 경로를 지정하든지 할 경우 0을 리턴합니다.
<주의> 웹브라우저 주소창에서 실행할 경우에는 경로 구분자로 '\'를 쓰지 않고 '/'를 써야 합니다. (예) "storage card/logs"
또한 '#'는 '%23'으로, '%'는 '%25'로 각각 치환하여 사용해야 합니다.
에러코드와 메세지를 포함한 WebAPI에 대한 상세 설명은 다음 링크 : Web API (CHC 시리즈/HDM-C070RL/ 펌웨어 v3.49 이상 지원)를 참조하세요.
12. 원격 스크립트 관련 함수 (고급 기능, CHC 또는 그 상위 모델에서만 지원)
write_text("문자열") : 원격 스크립트 내에서만 동작하며 이더넷으로 특정 텍스트(
ASCII/UTF-8 인코딩)를 클라이언트에게 응답합니다. 성공하면 1을, 실패하면 0을 반환합니다.
상위 페이지로 가기