Xpanel의 스크립트는 C언어와 매우 유사한 프로그램 언어를 사용합니다. 변수를 사용할 수 있으며, 이미 작성된 다른 프로그램을 호출 할 수 있습니다. 또한, 일반적인 C언어에서 사용되는 Switch-Case, For, While, If-Else, Goto 등의 흐름 제어를 위한 키워드를 제공합니다.
작성된 각각의 프로그램은 독립된 스레드(Thread)로 동작되며, 멀티태스킹으로 처리됩니다. 또한, 각 프로그램마다 우선순위가 부여되어 등급에 따라 처리 속도가 다르게 적용됩니다. 최저 우선순위인 1부터 최고 우선순위 10까지 지정할 수 있습니다.
특징
프로그램 구문 검사의 모든 단계에서 대/소문자를 구분하지 않습니다.
Xpanel의 데이터베이스에 등록된 모든 태그는 별도의 기호 없이 프로그램 내부의 변수로 직접 사용할 수 있습니다.
변수는 실수형, 문자열형을 지원하며 프로그램 실행 중 자동으로 결정됩니다.단, 하나의 변수를 실수/문자열형 데이터의 처리에 동시에 사용할 수 없습니다.
설정 화면
[도구] – [스크립트]를 클릭하여 스크립트 편집기로 진입할 수 있습니다.
항목 | 설명 |
스크립트를 추가합니다. 스크립트의 실행 옵션을 선택하는 화면이 나타납니다. | |
선택한 스크립트를 편집합니다. 스크립트 실행 옵션을 선택하는 화면이 나타납니다. 단, 스크립트 이름을 변경할 수는 없습니다. | |
선택한 스크립트를 검사합니다. 검사 결과는 편집화면 하단의 [빌드] 영역에 표시됩니다. | |
등록된 모든 스크립트를 검사합니다. 검사 결과는 편집화면 하단의 [빌드] 영역에 표시됩니다. | |
선택한 스크립트 내 커서가 위치한 곳에 상세 디바이스 어드레스를 입력합니다. | |
선택한 스크립트 내 커서가 위치한 곳에 태그 이름을 입력합니다. |
항목 | 설명 |
스크립트 이름 | 스크립트의 이름을 입력합니다. 편집 화면일 경우 해당 영역은 비활성화됩니다. |
실행방식 | 스크립트가 실행될 방식을 선택합니다. 자동으로 선택한 경우 프로젝트 실행과 동시에 해당 스크립트를 1회 동작 시킵니다. 수동으로 선택한 경우 명령식 등의 외부 호출에 의하여 1회 동작합니다. 정주기를 선택하면 실행주기에 지정한 초마다 해당 스크립트를 반복하여 실행합니다. |
실행주기 | 해당 스크립트의 반복 주기를 설정합니다. 정주기를 선택한 경우에만 활성화됩니다. 1초에서 65535초까지 지정할 수 있습니다. |
우선순위 | 해당 스크립트의 실행 우선순위를 지정합니다. 가장 낮은 우선순위는 1이며 가장 높은 우선순위는 10입니다. |
프로그램 구조
스크립트는 크게 선언부와 프로그램부로 구분됩니다. 선언부는 내부 변수 및 입력 파라미터를 선언하며, 프로그램부는 변수와 파라미터 선언 외의 모든 프로그램 구문을 입력하는 영역입니다.
주석은 프로그램 어느 위치에도 입력할 수 있으며, ‘//’ 기호를 입력하여 주석의 시작을 표시합니다. 해당 기호 이후에 입력되는 모든 문자열은 해당 행이 끝나는 부분까지만 주석으로 인식합니다.
(1) 선언부
항목 | 설명 |
변수의 선언 | VAR variable_name [, variable_name]; 의 형태로 내부 변수를 선언합니다. 선언된 변수의 초기 값은 0입니다. 하나 이상의 변수를 선언하고자 하는 경우 쉼표 “ , ” 를 사용하여 변수 이름을 기술합니다. 프로그램부가 시작되기 전까지 여러 개의 VAR 키워드를 사용할 수 있습니다. 단, 변수 이름은 데이터베이스에 추가된 태그 (그룹, 디지털, 아날로그, 문자열) 이름과 중복하여 사용할 수 없습니다. 태그 이름과 동일한 이름의 변수를 선언하는 경우 컴파일 오류 또는 실행 중 오동작의 원인일 될 수 있으므로 주의하시기 바랍니다. |
입력 파라미터의 선언 | PARAM 1st parameter [, 2nd parameter …]; 의 형태로 파라미터를 선언합니다. 다른 프로그램 또는 명령식에서 호출되는 경우에 필요한 입력 파라미터를 선언합니다. 선언의 순서는 입력 파라미터의 지정 순서와 동일하여야 합니다. 파라미터는 프로그램이 호출될 때 호출자가 지정하는 값으로초기화됩니다. 하나 이상의 파라미터가 선언되는 경우에는 쉼표 “ , ” 를 사용하여 파라미터 이름을 기술합니다. 프로그램부가 시작되기 전까지 여러 개의 PARAM 키워드를 사용할 수 있습니다. |
예시 | 프로그램명: MyPgm VAR a, b;
위처럼 작성된 프로그램 (MyPgm)은 외부 명령식 또는 프로그램에서 다음과 같이 호출할 수 있습니다. MyPgm(1,2,3); 이 때, p1, p2, p3 파라미터에는 각각 값 1, 2, 3이 저장됩니다. 변수 a, b, c는 0으로 초기화됩니다. |
(2) 프로그램부
프로그램부에는 변수(VAR) 또는 파라미터(PARAM) 선언을 제외한 모든 프로그램 구문이 사용될 수 있습니다. 가장 기본적인 구문의 형태의 예로 함수 호출과 연산 및 그 결과의 저장을 들 수 있습니다.
기본 구문을 사용한 프로그램 예시는 다음과 같습니다.
Tag_a = Tag_a + 1;
Tag_b = MyPgm(Tag_a, 2, 3);
구문의 끝에는 항상 “ ; ” 기호를 사용하여 해당 구문의 끝을 표시하여야 합니다. 모든 함수는 하나의 결과값을 호출자에게 되돌려줍니다. 위 예시는 그 값을 Tag_b에 저장하는 프로그램입니다.
(3) 상수의 표기
프로그램 내에서 상수를 사용하고자 하는 경우, 다음과 같은 표기법을 사용할 수 있습니다.
항목 | 설명 |
8진 상수 | 0에서 7까지의 숫자만 이용하여 연속된 숫자로 표기합니다. (예: 01277) |
10진 상수 | 일반적인 표기법을 따릅니다. (예: 153, 3.14, 2.45E-12) |
16진 상수 | ‘0x’로 시작하여 ‘0’-‘F’ 범위의 연속된 알파벳 또는 숫자를 사용하여 표기합니다. (예: 0xFFFF) |
문자열 상수 | 두개의 큰따옴표 (“ ”) 기호 사이에 사용하고자 하는 문자열을 기록합니다. (예: “String Variable1”) |
그 외에도 PI_ (pi: 3.14……) 등 다음의 표에 기록된 기호를 이용하여 상수를 이용할 수 있습니다.
정의된 기호 | 값 | 의미 |
_PI_ |
| 3.141592… 원주율 값 |
_LOCAL_ | 0 | Local Flash Memory |
_SDMEM_ | 1 | SD/MMC Memory |
_USBMEM_ | 2 | USB Memory |
_COM232_ | 0 | COM1 포트를 RS232C Mode로 사용한다. |
_COM422_ | 1 | COM1 포트를 RS422 Mode로 사용한다. |
_COM485_ | 2 | COM1 포트를 RS485 Mode로 사용한다. |
_COMAUX_ | 3 | COM2 포트를 RS232C Mode로 사용한다. |
_BPS300_ |
| 300 bps |
_BPS600_ |
| 600bps |
_BPS1200_ |
| 1200bps |
_BPS2400_ |
| 2400bps |
_BPS4800_ |
| 4800bps |
_BPS9600_ |
| 9600bps |
_BPS19200_ |
| 19200bps |
_BPS38400_ |
| 38400bps |
_BPS56000_ |
| 56000bps |
_BPS57600_ |
| 57600bps |
_BPS115200_ |
| 115200bps |
_BPS128000_ |
| 128000bps |
_BPS256000_ |
| 256000bps |
_PARITY_NONE_ |
| NO PARITY BIT |
_PARITY_EVEN_ |
| EVEN PARITY |
_PARITY_ODD_ |
| ODD PARITY |
_PARITY_MARK_ |
| MARK PARITY |
_PARITY_SPACE_ |
| SPACE PARITY |
_STOPBIT_ONE_ |
| 1 STOP BIT |
_STOPBIT_TWO_ |
| 2 STOP BITS |
_STOPBIT_ONE5_ |
| 1.5 STOP BIT |
연산자
프로그램 내에서 사용자가 사용할 수 있는 연산자에는 산술, 논리/비교, 기타 연산자로, 총 3 종류가 있습니다.
(1) 산술 연산자
아래 표에서 결과값은 변수 A와 B가 각각 값 3 (0000 0000 0000 0011), 4 (0000 0000 0000 0100)를 저장하고 있는 경우의 연산 결과입니다.
나머지 연산과 모든 Bitwise 연산은 32BIT 정수형 데이터로 변환된 후 계산됩니다.
연산자 | 기능 | 표현예시 | 설명 |
~ | 1의 보수 | ~A | A가 0000 0000 0000 0011b 이므로, 결과는 1111 1111 1111 1100b 입니다. |
+ | 더하기 | A+B | A와 B를 더한 값을 의미합니다. 결과는 7 입니다. |
- | 빼기 | A –B | A에서 B를 뺀 값을 의미합니다. 결과는 -1입니다. |
* | 곱하기 | A*B | A와 B를 곱한 값을 의미합니다. 결과는 12입니다. |
/ | 나누기 | A / B | A를 B로 나눈 값을 의미합니다. 결과는 0.75입니다. |
% | 나머지 | A % B | A를 B로 나눈 나머지를 의미합니다. 결과는 3입니다. |
& | Bitwise AND | A & B | A와 B를 BIT 단위로 AND 연산을 합니다. 결과는 0입니다. |
| | Bitwise OR | A | B | A와 B를 BIT 단위로 OR 연산을 합니다. 결과는 0111b (= 7) 입니다. |
^ | Bitwise XOR | A ^ B | A와 B를 BIT 단위로 XOR 연산을 합니다 결과는 0111b (= 7) 입니다. |
<< | 좌측 Shift | A << B | A의 값(BIT)을 좌측으로 B 만큼 이동한 값을 의미합니다. 우측은 0으로 채워집니다. 결과는 0011 0000b (= 48) 입니다. |
>> | 우측 Shift | A >> B | A의 값(BIT)을 좌측으로 B 만큼 이동한 값을 의미합니다. 좌측은 0으로 채워집니다. 결과는 0입니다. |
(2) 논리/비교 연산자
다음 표에서 결과값은 각각 1 (True)와 0 (False)의 값을 저장하고 있는 경우의 연산 결과입니다. Xpanel은 논리 연산을 위한 별도의 값을 처리하지 않습니다. 즉, 0이 아닌 값은 모두 정논리 (True)로 처리합니다. 오직 0만 부논리 (False)로 인식합니다.
연산 결과가 정논리 (True)일 때 그 값은 항상 1입니다.
연산자 | 기능 | 표현예시 | 설명 |
&& | Logical AND | A && B | A와 B가 모두 참인 경우 1, 그밖의 경우에는 0 입니다. |
|| | Logical OR | A || B | A와 B가 모두 거짓인 경우 0, 그밖의 경우에는 1 입니다. |
< | 작다 | A < B | A가 B보다 작으면 1, 아니면 0 입니다. |
> | 크다 | A > B | A가 B보다 크면 1, 아니면 0 입니다. |
<= or =< | 작거나 같다 | A <= B | A가 B보다 작거나 같으면 1, 아니면 0 입니다. |
>= or => | 크거나 같다 | A >= B | A가 B보다 크거나 같으면 1, 아니면 0 입니다. |
== | 같다 | A == B | A가 B이면 1, 아니면 0 입니다. |
!= | 같지 않다 | A != B | A가 B가 아니면 1, 같으면 0 입니다. |
(3) 기타 연산자
연산자 | 기능 | 표현예시 | 설명 |
= | 저장 | A = B | B의 값을 A에 저장(기록) 하고 연산의 결과로 처리합니다. |
저장 연산자는 다음과 같이 연속하여 사용할 수 있습니다.
A = B = C;
이 경우 A와 B의 값은 C의 값으로 기록됩니다. 즉, 연산자 오른쪽에 위치한 수식의 값을 “=” 연산의 결과값으로 처리합니다. 위의 예는 다음과 같은 순서로 프로그램 내부에서 연산됩니다.
B ← C
A ← B
NOTE | “=” 연산자의 특성 때문에 다음 예와 같이 검출되지 않는 프로그램 오류가 빈번하게 발생합니다. 이 경우 A와 B의 값이 같지 않음에도 IF 문의 연산 결과는 True가 될 수 있으며, 원하지 않는 값이 A에 기록될 수도 있습니다. //=================== If (A=B) // A와 B의 값이 동일한지의 여부를 검사하는 부분, (A==B)의 오기 |
명령식 및 조건식
경우에 따라 오브젝트의 동작을 설정할 때, 간단한 스크립트를 사용해야 하는 경우가 발생합니다. 예를 들어 다음 그림과 같이 터치 설정의 오브젝트 동작에 조건과 명령식을 입력할 수 있습니다. 표현 방법은 스크립트 프로그램 방법과 동일합니다.
(1) 조건식의 표현
연산자 | 기능 | 표현예시 | 설명 |
&& | Logical AND | A && B | A와 B가 모두 참인 경우 1, 그밖의 경우에는 0 입니다. |
|| | Logical OR | A || B | A와 B가 모두 거짓인 경우 0, 그밖의 경우에는 1 입니다. |
< | 작다 | A < B | A가 B보다 작으면 1, 아니면 0 입니다. |
> | 크다 | A > B | A가 B보다 크면 1, 아니면 0 입니다. |
<= or =< | 작거나 같다 | A <= B | A가 B보다 작거나 같으면 1, 아니면 0 입니다. |
>= or => | 크거나 같다 | A >= B | A가 B보다 크거나 같으면 1, 아니면 0 입니다. |
== | 같다 | A == B | A가 B이면 1, 아니면 0 입니다. |
!= | 같지 않다 | A != B | A가 B가 아니면 1, 같으면 0 입니다. |
다음은 오브젝트 동작 설정 시 사용 가능한 조건 표현 예제입니다.
입력 예 | 설명 |
(Tag_A != 1) && (Tab_B == 10) | Tag_A의 값이 1이 아니고 Tag_B의 값이 10일 경우 결과로 1을 반환, 아닐 경우 0을 반환합니다. |
Sin(Tag_A) == 1 | Tag_A의 Sin 값이 1일 경우 결과로 1을 반환, 아닐 경우 0을 반환합니다. |
Tag_A < 100 | Tag_A가 100보다 작으면 1, 아니면 0 을 반환합니다. |
(Tag_A + Tag_B) < (Tag_A + Tag_C) | Tag_A와 Tag_B를 더한 값이 Tag_와 Tag_C를 더한 값보다 작으면 1, 아니면 0 을 반환합니다. |
(2) 명령식
Xpanel에서 명령식의 사용은 하나로 제한되지 않고 여러 개의 목록으로 작성될 수 있습니다. 즉, 명령식은 특별한 스크립트프로그램으로 생각할 수 있습니다. 스크립트에 사용되는 함수들은 명령식에서도 사용할 수 있습니다.
명령식의 우선순위는 스크립트와 다릅니다. 오브젝트의 터치 동작이나 기타 다른 방법으로 명령식의 실행 조건이 성립되면 명령식은 최우선으로 실행됩니다. 즉, 명령식이 실행되는 동안에는 다른 오브젝트의 동작 처리가 진행되지 않고, 명령식이 종료될때까지 대기하게 됩니다. 특히, 명령식을 통해 호출된 함수의 경우 호출된 함수는 명령식이 우선순위와 동일하게 취급됩니다.
예시로, 명령식에서 스크립트를 실행하기 위하여 RunScript 함수를 사용할 수 있으며, 병렬처리의 형태로 동작합니다. 스크립트가 호출되어 실행되면, 명령식은 스크립트의 처리가 완료될때까지 기다리지 않고 다음 명령식을 처리합니다.
다음은 명령식의 예제입니다.
입력 예 | 설명 |
Tag_A = 100; | Tag_A의 값을 100으로 변경하고, “NewPage”로 지정된 페이지를 엽니다. |
Tag_B = Tab_B + 1 | Tag_B의 값을 1 증가시킵니다. |
Tag_A = 100; | Tag_A 와 Tag_B의 값을 각각 100과 1로 변경하고 MyLoop() 으로 작성된 스크립트를 실행합니다. 스크립트가 실행되면 스크립트의 실행 종료와 관계없이 데이터 수집모델 “LogModel”의 데이터를 CSV 파일 형식으로 SD메모리에 저장합니다. |
프로그램 문법
다음은 스크립트 프로그램 내에서 사용할 수 있는 구문 및 키워드입니다.
종류 | 설명 |
IF-ELSE 구문 | 가장 기본적인 논리판단 구문입니다. |
WHILE/DO-WHILE 구문 | Loop 처리를 위한 기본적인 구문입니다. |
FOR 구문 | 다소 복잡한 구문이나 익숙해질 경우 간결한 형태의 Loop 처리 구문입니다. |
SWITCH-CASE 구문 | 여러 경우에 따라 처리 방법이 다른 경우 사용하는 구문입니다. |
GOTO 구문 | 프로그램의 진행 흐름을 강제로 지정할 수 있는 키워드입니다. |
CONTINUE 키워드 | Loop 구문 내에서 유용하게 쓰이는 키워드입니다. |
RETURN 키워드 | 모든 프로그램은 하나의 결과값을 출력합니다. |
RUNSCRIPT 키워드 | 다른 프로그램을 함수 방식으로 호출하는 경우, 호출 프로그램은 피호출 프로그램이 종료될때까지 대기상태가 됩니다. |
(1) IF-ELSE
IF-ELSE 구문은 가장 기본적인 논리판단 구문으로, IF-ELSE IF-ELSE IF… 와 같은 중첩 구문의 구성이 가능합니다. 중첩 횟수에는 제한이 없습니다. 또한 ELSE 구문의 생략이 가능합니다.
If (A == 1) |
(2) WHILE/DO-WHILE 구문
Loop 처리를 위한 기본적인 구문입니다. WHILE 키워드에 연속하여 기록되는 구문의 연산결과가 True인 동안에 하위에 기록된 구문을 반복하여 실행합니다.
A = 0; |
While 구문의 하위 구문들은 논리판단 결과에 따라 전혀 실행되지 않을 수도 있습니다. 이 때, DO-WHILE 구문을 이용하여 Loop처리 구문이 최소 1회 수행된 후에 논리연산을 실행하도록 합니다.
Do { |
(3) FOR 구문
이 구문의 특징은 Loop 개시 전 초기화 구문과 Loop 처리 여부를 판단하는 구문 및 매 Loop 수행 후 반드시 처리해야 하는 구문을 하나의 구문으로 통합한 형태입니다.
다음은 Loop 작업을 10회 반복하여 수행하는 경우를 For 구문을 이용하여 작성한 예입니다. (2) While 구문과 동일한 내용입니다.
For (A=0; A<10; A=A+1) |
FOR 구문에 따르는 괄호에는 초기화 구문, 판단 구문, 후처리 구문이 모두 서술됩니다.
FOR (초기화구문; 판단구문; 후처리구문)
(4) SWITCH-CASE 구문
여러 경우에 따라 처리 방법이 다른 경우 사용합니다. 각 경우는 CASE 구문으로 구별하며, 개수에는 제한이 없습니다.
Case 구문에 따르는 값은 반드시 상수여야 하며, 콜론 “ : ” 으로 구문의 끝을 알려야 합니다. 즉, “Case TAG_B” 같이 변수나 태그 또는 수식을 지정할 수 없습니다. Switch 구문에는 1개의 Default 구문을 사용할 수 있습니다.
Default 구문은 상수를 필요로 하지 않으며 이 곳에 서술되는 내용은 Case 구문 중 어떤 곳에도 해당하지 않는 경우 실행됩니다. 필요하지 않은 경우 생략할 수 있습니다.
Case와 Default에 서술되는 작업이 처리되는 중 Break 키워드를 만나면 Switch 구문을 종료합니다. 만약 Break 키워드를 만나지 않은 상태에서 다른 Case나 Default 구문에 이르면 해당 위치에 작성된 내용이 처리됩니다. 실수의 우려가 있으나 의도적으로 사용하는 경우 간결한 프로그램을 작성할 수 있습니다.
Switch (A) |
(5) GOTO 구문
프로그램의 진행 흐름을 강제적으로 지정할 수 있는 키워드입니다. 이 구문은 인덱스 (“@”로 시작하는 고유한 이름)를 사용해 새로운 위치를 지정하여 사용됩니다.
인덱스 명칭은 변수, 태그, 프로그램 이름 등과 중복되지 않아야 합니다.
VAR A; A = 0; |
(6) CONTINUE 키워드
Continue키워드는 Loop 구문 내부에서 유용하게 사용될 수 있습니다. 프로그램 진행 중 Continue 키워드를 만나면 현재 Loop의 선두 부분으로 프로그램 흐름이 이동합니다. 이 키워드는 WHILE, DO-WHILE, FOR 구문의 Loop 내부에서 유효합니다. 특히, Loop 내부에서 처리해야 하는 조건 판단(IF-ELSE)이 많은 경우 유용합니다. 다음은 동일한 작업을 처리하는 프로그램입니다.
While (A<10) While (A<10) |
(7) Return 키워드
모든 프로그램은 하나의 결과값을 출력합니다. 이 결과값은 다른 프로그램에 의하여 함수 형태로 호출되었을 때 전달됩니다. Return 키워드는 전달할 값을 결정하고, 프로그램의 진행을 종료하는 기능을 수행합니다.
다음 예제는 3개의 파라미터를 입력으로 받아 그 합을 호출자에게 전달하는 예제입니다.
다음 스크립트 프로그램의 이름을 MyPgm 이라고 가정합니다.
PARAM p1, p2, p3; Return p1+p2+p3; |
위의 프로그램을 다른 프로그램에서 호출되는 예제는 다음과 같으며, 예제 내 변수의 값에는 6이 저장됩니다.
RtnValue = MyPgm(1, 2, 3); |
(8) RUNSCRIPT 키워드
다른 프로그램을 함수 방식으로 호출하는 경우, 호출 프로그램은 피호출 프로그램이 종료될때까지 대기상태가 됩니다. 즉, 프로그램의 진행이 멈추고 피호출 프로그램이 종료되어 결과값을 전달하게 될 때까지 대기상태가 됩니다.
그러나 RunScript 키워드는 호출 프로그램의 종료를 대기하지 않습니다. 피호출 프로그램을 가동시킨 즉시 나머지 프로그램 작업을 진행합니다. 호출, 피호출 프로그램 둘 다 실행 상태가 되며 이는 Xpanel 스크립트 시스템의 멀티 태스킹 기능에 대응합니다.
If (A == 0) |
함수 일람
Xpanel의 스크립트에서 사용할 수 있는 함수의 종류로 삼각함수, 산술함수, 특수함수가 있습니다.
삼각함수는 사용자가 입력한 실수 파라미터에 대한 Sine, Cosine, Tangent 등의 값을 반환하는 함수입니다.
산술함수는 사용자가 입력한 실수 파라미터에 대한 로그, 절대값, 제곱근 값 반환, 난수 생성 등의 값을 반환하는 함수입니다.
특수 함수는 Xpanel의 프로젝트 제어 또는 기능 제어를 위하여 사용하는 함수입니다. 삼각함수, 산술함수와 달리 반환값이 없는 함수가 (서브루틴) 존재합니다.
※ 자세한 내용은 스크립트 (부록)을 참조하여 주시기 바랍니다.
사용 예제
본 예제는 기능을 설명하기 위해 삽입된 예제입니다. 실제 사용 시 사용자의 환경에 맞게 설정하여 사용해주십시오. |
사용 예제 : 정주기로 회전 기능 사용하기 |
시계의 초침이 움직이는 동작을 스크립트로 표현할 수 있습니다.
(1) 오브젝트 설정
a) 회전 기능에 사용할 아날로그 태그 ‘ROTATE_SEC’ 태그를 생성합니다.
b) 초침으로 지정한 선 오브젝트를 더블클릭하여 [그림설정] 화면으로 진입합니다. [회전] 기능을 클릭하고 다음 그림과 같이 설정합니다.
c) [회전방법설정] 탭에서 회전 중심점을 설정하기 위해 중심점에 마우스 커서를 위치시킵니다. 화면 우측 하단에 해당 포인트의 좌표가 나타납니다. 해당 값을 [회전중심점] 영역에 입력합니다.
(2) 스크립트 작성
a) [도구] – [스크립트] – [스크립트 추가] 버튼을 누릅니다. [스크립트 추가] 화면에서 실행 방식을 정주기로 설정하고, 실행 주기는 1초로 설정합니다.
b) 다음과 같이 스크립트를 작성합니다. ROTATE_SEC 태그의 값이 360이 되거나 초과하여 원점에 도착하면 6이란 값을 태그에 저장해 계속 회전을 시킵니다. 1초당 6°씩 움직입니다.
VAR A; //A 변수 선언 IF(A>=360) |
c) 스크립트를 검사하여 등록을 마칩니다.
(3) 동작 확인
a) 프로젝트를 Xpanel에 쓰거나 시뮬레이터를 실행하여 동작을 확인합니다. 초침 오브젝트가 매초 움직이는 것을 확인할 수 있습니다.