사용자 도구

사이트 도구

English

comfilehmi:hmieditor_function:index

시스템 함수

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비트 정수및 실수형 수치를 저장할 수 있습니다.
  • set_mem(번지,값) : 내부 메모리 특정번지에 값을 기록.
  • mem(번지) : 내부 메모리 특정번지에서 값을 읽어옴.

다음과 같이 연속된 번지에 계속 값을 기록할 수도 있습니다.

  • set_mem(번지,값1,값2,값3….)

2. 기본 수학함수

인수가 1개인 함수입니다.

  • sin : 사인
  • cos : 코사인
  • tan : 탄젠트
  • asin : 아크사인
  • acos : 아크코사인
  • atan : 아크탄젠트
  • sinh : 하이퍼블릭 사인
  • cosh : 하이퍼블릭 코사인
  • tanh : 하이퍼블릭 탄젠트
  • floor : 소수점 이하를 버린 정수값 리턴
  • ceil : 소수점 이하를 올린 정수값 리턴
  • exp : 익스포넨셜(exponential), 자연로그의 밑 e의 거듭제곱승 리턴.
  • log : 자연로그
  • log10 : 사용로그
  • fabs : 절대값. 항상 양수로 리턴.
  • sqrt : 제곱근

인수가 2개인 함수입니다.

  • pow(x,y) : x의 y제곱
  • fmod(x,y) : x를 y로 나눈 나머지

인수가 여러개인 함수입니다.

  • max(x,y,z,…) : 가장 큰 값
  • min(x,y,z,…) : 가장 작은 값
  • max_index(x,y,z,…) : 가장 큰 값의 인덱스(순번을 말하며 0부터 시작합니다.)
  • min_index(x,y,z,…) : 가장 작은 값의 인덱스(순번을 말하며 0부터 시작합니다.)
  • avg(x,y,z,…) : 평균값
  • stdev(x,y,z,…) : 표준편차값
  • scale(입력값, 입력 최소값, 입력 최대값, 출력 최소값, 출력 최대값)

3. 시스템 함수

시스템과 관련된 함수입니다. 인수가 없는 함수들입니다.

  • tick_count() : 기기가 부팅한 이후로 경과된 1000분의 1초 단위의 시간(ms)
  • touch_duration() : 마지막으로 터치를 누른 채로 현재까지 경과된 시간(ms). 만약 터치가 눌려져 있는 상태가 아니라면 -1.0을 반환.
  • action_group_repeat_index() : 사용자 액션그룹을 반복 실행할 경우 현재 반복된 순번(0부터 시작). 실행된 사용자 액션그룹에 소속된 액션 내부에서 이 함수를 호출하여 값을 얻습니다.
  • idle_seconds() : 현재까지 얼마나 오랫동안 터치 입력이 없었는지 나타내는 함수(초 단위)
  • idle_minutes() : (분 단위) ※ 주의: set_backlight_state(1)을 수행시 초기화됩니다.
  • prev_screen_id() : 이전 화면 번호
  • screen_id() : 현재 화면 번호
  • timeout_result() : 가장 최근 통신의 결과 타임아웃이 발생했을 경우 1을 리턴. 발생하지 않았거나 통신내역이 없다면 0을 리턴합니다.
    ※ 각 외부 장치별로 타임아웃 시점에 특정 동작을 하게 하려면 [외부장치 속성>이 외부장치에서 타임아웃 발생시 사용자 액션 그룹 실행] 에 체크하고 사용자 액션 그룹을 생성합니다.
  • timeout_count() : 프로젝트 실행후 현재까지의 타임아웃 총 발생횟수를 리턴.
  • reset_timeout_count() : 위 timeout_count()함수로 얻을 수 있는 횟수를 0으로 초기화 합니다.
  • cpu_usage() : 현재 시스템의 CPU 점유율을 백분율로 나타냅니다. 시뮬레이터와 PC런타임에서는 항상 0을 반환합니다.
  • reboot_system() : 시스템을 재부팅합니다. 시뮬레이터/PC 런타임에서는 지원하지 않습니다.
  • firmware_version() : 현재 펌웨어 버전을 반환합니다. 예를 들어 2.73일 경우 273을 반환합니다.
  • keypad_state() : 현재 동적 키패드가 띄워져 있는지 여부를 반환합니다. 띄워져 있을 경우 1, 그렇지 않으면 0을 반환합니다.
  • backlight_state() : 현재 백라이트가 켜져 있는지 여부를 반환합니다. 켜져 있을 경우 1, 그렇지 않으면 0을 반환합니다.
  • beep() : 비프음을 발생시킵니다.(버튼 터치할 경우 나는 터치음과 같은 음입니다). 음성을 지원하지 않는 모델일 경우는 부저음을 발생시킵니다.
  • exit_project() : 프로젝트를 종료하고 HMI 초기화면으로 전환합니다.(HMI의 우측 상단 모서리를 5번 누른 것과 같은 효과입니다)
  • keypad_value() : 가장 최근에 입력했던 키패드의 입력값을 반환합니다.
  • keypad_text() : 가장 최근에 입력했던 키패드 입력값을 문자열로 반환합니다 (숫자 키패드, 멀티 키패드 모두 적용)
  • keypad_text_length() : 가장 최근에 입력했던 키패드 입력값의 문자열 길이를 반환합니다 (숫자 키패드, 멀티 키패드 모두 적용)
  • free_memory_bytes() : 현재 사용 가능한 시스템의 남은 메모리양(byte 단위)을 반환합니다. 시뮬레이터와 PC버전에서는 항상 0을 반환합니다.
  • status_monitoring_message() : 현재 상태 모니터링 출력 메세지를 반환합니다.
  • is_status_monitoring_enabled() : 현재 상태 모니터링이 활성화되어 있는지 조사합니다. 1을 리턴하면 활성화되어 있는 것이고 0을 리턴하면 비활성화되어 있는 것입니다.
  • self_ip_addr() : 현재 기기의 내부 IP 주소를 문자열로 반환합니다(예: 192.168.0.50). 주의: 시뮬레이터에서/PC런타임에서는 공백을 반환합니다.
  • queries_per_sec() : 최근 초당 통신 요청 횟수를 반환합니다.

인수가 있는 함수들입니다.

  • enable_status_monitoring(활성화 여부 =1) : 상태 모니터링을 활성화할지 비활성화할지 결정합니다. 런타임의 설정을 바꾸는 효과가 있으므로 재부팅해도 설정이 유지됩니다. 파라미터가 1일 경우 활성화시키고 0일 경우 비활성화시키며 생략시 기본값은 1입니다.
  • 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_backlight_state(설정값) : 백라이트를 켜거나 끕니다. 설정값이 1일 경우 켜고 0일 경우 끕니다. <주의>이 함수를 사용하여 백라이트를 껐어도 화면을 터치할 경우 다시 켜집니다.
  • start_action_group("사용자 액션 그룹명") : 사용자 액션 그룹을 실행합니다. <주의> 이 함수의 실행은 뒤따르는 스크립트보다 실행 순서가 미루어집니다.
  • change_screen(화면 번호) : 주어진 화면 번호로 화면을 이동합니다.
  • set_viewer_browser_title("웹브라우저 타이틀") : 웹브라우저로 HMI를 원격 접속할 때 웹브라우저의 타이틀을 원하는 문구로 나타나게끔 수정합니다.
  • set_field_resource_color(리소스 번호,R,G,B) : 색상 필드 리소스의 색상을 실시간으로 변경할 수 있습니다. (주의: 에디터에서 미리 정의한 색상만 변경할 수 있습니다.) 예) set_field_resource_color(3,255,0,0) ⇐= 3번 색상 리소스를 적색으로 변경합니다.
  • restore_field_resource_color(리소스 번호) : 색상 필드 리소스의 색상을 에디터에서 정한 원래 색상으로 되돌립니다. 예) restore_field_resource_color(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의 값을 다시 갖게 됩니다.
  • bitwise_not(입력값) : 주어진 입력값에 대해 NOT 비트 연산을 하여 반환합니다.
  • hibyte(입력값) : 주어진 입력값의 상위 바이트 값을 반환합니다. 예) hibyte(0x1234) 를 실행시 0x12를 반환합니다.
  • lobyte(입력값) : 주어진 입력값의 하위 바이트 값을 반환합니다. 예) lobyte(0x1234) 를 실행시 0x34를 반환합니다.
  • hiword(입력값) : 주어진 입력값의 상위 워드 (16비트) 값을 반환합니다. 예) hiword(0x12345678) 를 실행시 0x1234를 반환합니다.
  • loword(입력값) : 주어진 입력값의 하위 워드 (16비트) 값을 반환합니다. 예) loword(0x12345678) 를 실행시 0x5678을 반환합니다.
  • 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);
  • toggle_bit("변수명", 비트번호 ) : 특정 변수의 특정 비트를 반대로 바꿉니다. 변수명은 따옴표로 감싸져야하며 비트번호는 가장 낮은 비트(LSB)가 0입니다. 비트 갯수는 32개까지 지원합니다.
    (예) toggle_bit("b",7);
  • 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)
  • toggle_membit(번지, 비트번호) : 특정 번지의 내부 메모리 값의 특정 비트를 반대로 바꿉니다. 비트번호는 가장 낮은 비트(LSB)가 0입니다. 비트 갯수는 32개까지 지원합니다.
    (예) toggle_membit(40,7);
  • 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. 액션 파라미터 관련 함수

액션추가에서 <사용자 액션 그룹 실행>의 <고급옵션>을 활성화시키면 <액션 파라미터>와 <보조 액션 파라미터>라는 항목이 나옵니다.

여기에 어떤 숫자를 넣으면, 이 숫자를 다음 함수로 읽어올 수 있습니다.

  • action_param() : 사용자 액션그룹을 실행하는 시점에 세팅되는 임의의 값을 가져옵니다. 실행된 사용자 액션그룹에 소속된 액션 내부에서 이 함수를 호출하여 값을 얻습니다.
  • sub_action_param() : 사용자 액션그룹을 실행하는 시점에 세팅되는 보조 값을 가져옵니다. 실행된 사용자 액션그룹에 소속된 액션 내부에서 이 함수를 호출하여 값을 얻습니다.

6. RTC (리얼타임클록) 관련 함수

인수가 없고, 리턴값이 있는 함수들입니다.

  • year() : 현재 연도
  • month() : 현재 월
  • day() : 현재 일
  • day_of_week() : 현재 요일 (일요일=0, 월요일=1, 화요일=2, …)
  • hour() : 현재 시각
  • minute() : 현재 분
  • second() : 현재 초
  • rand() : 0~ 32767 (0x7fff) 사이의 난수를 얻습니다.

인수가 1개이고 리턴값이 없는 함수들입니다.

  • set_year(연도) : 연도를 세팅
  • set_month(월) : 월을 세팅
  • set_day(일) : 일을 세팅
  • set_hour(시) : 시를 세팅
  • set_minute(분) : 분을 세팅
  • set_second(초) : 초를 세팅
  • srand(seed) : rand() 함수에서 추후에 얻어질 값을 결정하기 위해 난수 체계를 초기화합니다. seed값에 따라 예측 가능한 시작값으로 난수 체계가 정해집니다. srand(tick_count()); 라고 하면 예측 불가능한 시작값으로 시작됩니다. rand() 함수를 호출하기 위해 이 함수를 필수적으로 호출해야 되는 것은 아닙니다.

인수가 2개 이상인 함수들입니다.

  • last_day_of_month(연도, 월) : 특정 연도의 특정 월의 마지막 날이 몇일인지 반환합니다.

7. 문자열 관련 함수

  • text_to_num("문자열") : 문자열을 넣으면 수치값을 반환.
    (예) "32.1"을 넣으면 32.1이 반환됨
  • text_hex_to_num("16진 문자열") : 16진 문자열을 넣으면 수치값을 반환.
    (예) "FF"를 넣으면 255가 반환됨
  • num_to_text_int(수치) : 수치값을 넣으면 정수형태의 텍스트를 반환
    (예) 32.1을 넣으면 "32"가 반환됨
  • num_to_text_int(수치,자리수) : 수치값을 넣으면 자리수가 고정된 정수형태의 텍스트를 반환
    (예) 32.1과 4를 넣으면 "0032"가 반환됨
  • num_to_text_hex(수치) : 수치값을 넣으면 16진수형태의 텍스트를 반환
    (예) 10.1을 넣으면 "A"가 반환됨
  • num_to_text_hex(수치,자리수) : 수치값을 넣으면 자리수가 고정된 16진수 형태의 텍스트를 반환
    (예) 10.1과 4를 넣으면 "000A"가 반환됨
  • num_to_text_dec(수치,소수자리수) : 수치값을 넣으면 특정 소수자리수를 가진 실수 텍스트를 반환
    (예) 10.3과 4를 넣으면 "10.3000"이 반환됨
  • find_text("대상 문자열","찾는 문자열") : 문자열 내에서 문자열을 찾습니다. 찾으면 0 이상의 찾은 위치값을 반환하고, 없으면 -1을 반환합니다.
    (예) find_text("abcde","cd") 는 2를 반환합니다.
  • replace_text("문자열 변수명", "찾는 문자열", "대체 문자열") : 특정 문자열 변수 값 내에서 특정 문자열을 다른 문자열로 변경합니다. 문자열 변수명은 반드시 따옴표로 감싸야 하고 '$' 기호는 생략합니다.
    (예) $var="I eat lunch.";replace_text("var","lunch","dinner")
  • text_size("문자열") : 문자열의 길이를 반환합니다. text_size("공정A") ←- 3을 반환합니다.
  • 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_size(최대 가능 문자열 갯수) : 텍스트 메모리의 최대 용량을 설정합니다. 최대 100,000(십만)개까지 설정 가능합니다.
  • tmem(번지) : 텍스트 메모리 특정번지에서 값을 읽어옵니다.
  • 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. 파일 관련 함수

  • file_to_text("파일 경로") : 파일 경로를 넣으면 그 파일에 현재 담겨 있는 내용을 문자열로 반환. 파일 내용이 FF FE 로 시작할 경우 UTF-16LE 유니코드로 자동 인식. 파라미터로 문자열 변수 사용 가능. 실패할 경우 공백을 반환합니다.
    (예) 스크립트에 다음과 같이 씁니다: $content=file_to_text("storage card\myfile.txt")
  • text_to_file("문자열", "파일 경로") : 문자열과 파일 경로를 넣으면 문자열의 내용을 파일에 기록함(UTF-16LE 유니코드 형식이며 FF FE로 시작함). 파라미터로 문자열 변수 사용 가능. 성공할 경우 1을, 실패할 경우 0을 반환합니다.
    (예) 스크립트에 다음과 같이 씁니다: text_to_file($content,"storage card\new.txt")
  • file_exists("파일 경로") : 파일 또는 폴더가 존재하는지 여부를 조사하여 결과값을 반환합니다. 존재하면 1, 그렇지 않으면 0을 반환합니다.
    (예1) file_exists("storage card\myfile.txt")==1
    (예2) SD카드가 꼽혀져 있는 지 조사하려면 file_exists("storage card")==1
  • file_size("파일 경로") : 파일 크기(바이트 수)를 조사하여 반환합니다.
    (예) file_size("storage card\myfile.txt")
  • delete_file("파일 경로") : 파일을 삭제합니다. 파일 삭제가 실패하거나 존재하지 않는 파일 삭제를 시도할 경우 0을 리턴하며 성공할 경우 1을 리턴합니다.
    (예) delete_file("storage card\myfile.txt")
  • delete_folder("폴더 경로") : 폴더를 삭제합니다. 하위 폴더도 같이 삭제합니다.
    (예) delete_folder("storage card\folder1")
  • rename_file("현재 파일 경로", "바꿀 파일 경로") : 파일 이름을 변경합니다.
    (예) rename_file("storage card\myfile.txt","storage card\newfile.txt")
  • base64_to_file("BASE64 형식의 문자열","저장할 파일 경로",저장 옵션 = 0) : BASE64 형식으로 된 바이너리 데이터를 해석하여 특정 파일에 기록합니다. 저장할 데이터와 경로에 문자형 변수('$'로 시작)를 사용할 수 있습니다. 기존 파일이 존재할 경우 저장 옵션이 0이면 덮어쓰고 0이 아니면 뒤에 이어서 기록합니다. 기본값은 0입니다.(덮어쓰기). 성공하면 1을, 실패하면 0을 반환합니다.
    (예) base64_to_file($base64_data,"storage card\myfile.bin",1)
  • file_to_base64("불러올 파일 경로") : 특정 파일을 읽어서 BASE64 형식(문자열)으로 변환하여 리턴합니다. 파일이 존재하지 않거나 실패할 경우 공백을 리턴합니다.
    (예) $base64_data=file_to_base64("storage card\data.bin")
  • ensure_folder_exist("폴더 경로") : 해당 폴더가 존재하도록 해줍니다. 폴더가 없으면 생성하되, 중간 단계의 폴더도 필요하다면 자동으로 생성해줍니다.
    (예) ensure_folder_exist("storage card\folder1\folder2") …(이 경우 folder1이 없다면 자동 생성)

9. 위젯 관련 함수

  • trendgraph_restart("트렌드 그래프의 심볼명") : 특정 심볼명을 가진 트렌드 그래프의 데이터 수집 동작을 시작시킵니다. 이미 진행중이던 경우는 수집했던 데이터를 모두 지우고 처음부터 시작합니다. 만약 백그라운드 동작이 활성화되지 않은 트렌드 그래프가 현재 화면에 존재하지 않는 경우는 시작시킬 수 없습니다. 심볼명은 중복될 수 있으며 해당 심볼명을 가진 모든 트렌드그래프에 적용됩니다.
    (예) trendgraph_restart("my_graph")
  • trendgraph_stop("트렌드 그래프의 심볼명",데이터 삭제 플래그 =0) : 특정 심볼명을 가진 트렌드 그래프의 데이터 수집 동작을 중지시킵니다. 두번째 파라미터가 0이 아닐 경우는 수집했던 데이터를 모두 지운 상태에서 멈추고, 0일 경우는 수집한 데이터를 그대로 보여주는 상태에서 멈춥니다. 이 파라미터는 생략할 수 있으며 생략할 경우 기본값은 0(데이터 삭제 안 함)입니다. 심볼명은 중복될 수 있으며 해당 심볼명을 가진 모든 트렌드그래프에 적용됩니다.
    (예1) trendgraph_stop("my_graph")
    (예2) trendgraph_stop("my_graph",1)

10. 프로토콜 관련 함수

  • set_modbus_word_write_always_multi(활성화 여부 플래그 =1) : Modbus 프로토콜 사용시 word의 갯수가 1개라도 내부적으로 펑션코드 6번(single word write)을 사용하지 않고 항상 16번(multi word write)으로 통일하여 사용하도록 설정합니다. 활성화 여부 플래그가 1일 경우 이 기능을 켜고 0일 경우 끕니다. 활성화 여부 플래그는 생략할 수 있으며 기본값은 1입니다(활성화함). 이 함수를 호출하기 전에 이 설정은 꺼져 있으며 재부팅 후 다시 꺼진 상태가 되므로 이 설정이 지속되게 하려면 프로젝트 시작시에 항상 이 함수를 호출해야 합니다.
    (예) set_modbus_word_write_always_multi()
  • 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일 경우의 예시이며 없을 경우 생략 가능.)

  • vars_to_json("변수명들") : 내부 변수값(또는 문자열 변수값)을 JSON 포맷으로 응답해줍니다. 대상 변수명은 문자열로 지정하며 여러개일 경우 '|'로 구분합니다.
    (예) vars_to_json("a|b|$c")
  • mem_to_json(내부 메모리 시작번지, 번지 갯수, 소숫자리수 =6) : 연속된 번지에 대한 내부 메모리 값을 JSON 포맷으로 응답해줍니다. 소숫자리수는 소숫자리가 있을 경우 최대 몇개의 자리까지 표시할지 결정하며, 생략 할 수 있습니다(기본값은 6)
    (예) mem_to_json(10,3) ←- 내부 메모리 10,11,12에 들어 있는 3개의 값을 응답해줌.
  • filenames_to_json("디렉터리 경로명") : 파라미터로 넘겨준 디렉터리 밑에 있는 모든 파일들의 이름 목록을 JSON 포맷으로 응답해줍니다. 대상 디렉터리 경로명은 문자열로 지정하며 여러개일 경우 '|'로 구분합니다.
    (예) filenames_to_json("storage card\logs|storage card\data1") ←- 'storage card\logs' 폴더와 'storage card\data1' 폴더 밑에 있는 모든 파일명 목록을 JSON 형식으로 응답합니다.
  • dirnames_to_json("디렉터리 경로명") : 위의 filenames_to_json 함수와 동작의 구조는 동일하나 응답값이 파일명 목록이 아닌 서브디렉터리명 목록입니다.
  • last_http_status_code() : 가장 최근 수신한 HTTP 응답에 대한 'HTTP 상태 코드'를 정수값으로 리턴합니다. 예를 들어 '200'은 성공을 뜻하며 404는 '파일 찾지 못함'을 나타냅니다.
  • last_json_result() : 가장 최근 수신한 json 응답을 조회합니다. 커맨드(script, open, download) 실행에 대한 성공 여부를 나타내며 1일 경우 성공, 0일 경우 실패를 의미하며 해당되는 json의 키는 "success"입니다. 예를 들어 script 커맨드의 내용 중에 문법적 오류가 있거나 원격 비밀번호가 일치하지 않거나 download 시도시 없는 파일의 경로를 지정하든지 할 경우 0을 리턴합니다.
  • last_json_error_code() : 가장 최근 수신한 json 응답 중에 오류 코드(숫자로 된 코드값. 키 : 'error.code')의 값을 리턴합니다.
  • last_json_error_message() : 가장 최근 수신한 json 응답 중에 오류 메세지 항목(키 : 'error.message')의 값(문자열)을 리턴합니다.

<주의> 웹브라우저 주소창에서 실행할 경우에는 경로 구분자로 '\'를 쓰지 않고 '/'를 써야 합니다. (예) "storage card/logs"
또한 '#'는 '%23'으로, '%'는 '%25'로 각각 치환하여 사용해야 합니다.

에러코드와 메세지를 포함한 WebAPI에 대한 상세 설명은 다음 링크 : Web API (CHC 시리즈/HDM-C070RL/ 펌웨어 v3.49 이상 지원)를 참조하세요.

12. 원격 스크립트 관련 함수 (고급 기능, CHC 또는 그 상위 모델에서만 지원)

  • write_byte(값) : 원격 스크립트 내에서만 동작하며 이더넷으로 특정 값 1개의 바이트(바이너리 데이터)를 클라이언트에게 응답합니다. 성공하면 1을, 실패하면 0을 반환합니다.
  • write_word(값) : 원격 스크립트 내에서만 동작하며 이더넷으로 특정 값 1개의 워드(2개의 바이트. 바이너리 데이터. 리틀 엔디안 방식)를 클라이언트에게 응답합니다. 성공하면 1을, 실패하면 0을 반환합니다.
  • write_dword(값) : 원격 스크립트 내에서만 동작하며 이더넷으로 특정 값 1개의 더블워드(4개의 바이트. 바이너리 데이터. 리틀 엔디안 방식)를 클라이언트에게 응답합니다. 성공하면 1을, 실패하면 0을 반환합니다.
  • write_text("문자열") : 원격 스크립트 내에서만 동작하며 이더넷으로 특정 텍스트(ASCII/UTF-8 인코딩)를 클라이언트에게 응답합니다. 성공하면 1을, 실패하면 0을 반환합니다.
  • write_file_contents("파일 경로") : 원격 스크립트 내에서만 동작하며 이더넷으로 특정 HMI 파일의 내용(바이너리 데이터 그대로 가공 없이)을 클라이언트에게 응답합니다. <주의> 최대 1MByte 까지만 보낼 수 있으며 초과되는 부분은 자동으로 잘려집니다. 성공하면 1을, 실패하면 0을 반환합니다.

상위 페이지로 가기

comfilehmi/hmieditor_function/index.txt · 마지막으로 수정됨: 2024/09/26 11:28 저자 Comfile Technology