1) For ~ Next (For , Next)

▶[For n]

FOR ~ NEXT 명령간의 처리를 n회 실행하게 되면 무조건 NEXT명령의 다음 스텝을 처리합니다.
n은 1~32767을 지정할 수 있습니다. -32768~0을 지정했을 때는 n=1과 동일한 처리를 합니다.
FOR ~ NEXT 명령 간의 처리를 하지 않을 때는 CJ, SCJ, 명령으로 점프시키십시오. FOR의 네스팅은 16중까지 가능합니다.

다음의 경우에는 연산에러가 되며, 에러플래그(SM0)가 ON하고, 에러 코드가 SD0에 저장됩니다.
FOR명령을 실행 후, NEXT명령을 실행하기 전에 END(FEND)명령을 실행했을 때 (에러코드: 4200)
FOR명령을 실행하기 전에 NEXT 명령을 실행했을 때 (에러코드:4201)
FOR명령의 네스팅을 실행하는 경우, 17번째 네스팅을 실행했을 때(에러코드:4202)

▶[NEXT]

FOR~NEXT 명령간의 처리에서 n에서 지정한 횟수만큼 FOR명령줄로 되돌려(점프) 줍니다.
FOR~NEXT 명령에서 FOR의 네스팅에서 같은 수 만큼 1:1로 NEXT문이 있어야 합니다.

2) FOR~NEXT 강제종료(BREAK(P))

▶[BREAK(P)   (D)  pn]

FOR~NEXT명령에 의한 반복처리를 강제적으로 종료하고, Pn으로 지정된 포인터로 실행위치를 이동합니다. Pn에는 동일 프로그램 파일 내의 포인터만 지정할 수 있습니다. Pn에 다른 프로그램 파일 내의 포인터를 지정한 경우는 연산 에러가 됩니다.
(D)에는 강제종료한 시점의 FOR~NEXT 명령에서의 반복처리 실행 횟수의 잔여수를 저장합니다. 단, 반복처리의 잔여수에는 BREAK 명령 실행시의 횟수도 포함됩니다. BREAK명령은 FOR~NEXT 명령 사이에 서만 사용할 수 있습니다. 
BREAK 명령은 하나의 네스팅에 대해서만 사용할 수 있습니다.
다중네스팅을 강제 종료 시킬 경우는 네스팅만큼의 BREAK 명령을 실행하십시오

3) 서브루틴 프로그램 호출(CALL(P))

▶[CALL(P)  Pn]

CALL(P)명령을 실행하면 Pn으로 지정된 포인터의 서브루틴 프로그램을 실행합니다. 
CALL(P)명령은 동일 프로그램 파일 내의 포인터로 지정한 서브루틴 프로그램과 공통 포인터로 지정한 서브루틴 프로그램을 실행할 수 있습니다.
서브루틴(SubRoutine) - 프로그래밍시 매크로(macro)기능을 자주 사용한다.
매크로란 반복되어 자주 사용되는 명령어를 묶어서 하나의 이름으로 만드는 것을 말한다.
C언어 등의 프로그래밍 언어를 이용하여 프로그래밍시 매크로를 사용하게 되면 컴파일시에 해당 매크로를 사용하는 부분은 매크로의 원문으로 모두 교체되게 되므로 소스코드의 크기가 커지고 그만큼 메모리의 점유율이 높아지는 단점이 있다.

이런 매크로의 단점을 극복하고 반복되는 것을 한번만 사용하여 메모리 사용을 최대한 줄이도록 고안된 것이 서브루틴(Sub-routine)이다. 이는 메인루틴(Main-routine)의 대비되는 개념으로 혼자 쓰이는 것이 아닌 메인루틴에 붙어 보조하는 역할을 한다. 반복되는 특정한 기능을 모아 놓은 이름을 붙여 놓았다는 것은 매크로와 같지만 프로그램 흐름이 메인루틴에 있지 않고, 별도의 공간에 한번만 생긴다는 것이 다르다. 아래 예를 통해서 서브루틴에 대한 개념을 정확히 알아보도록 하자.

▶[CALL(P) Pn(S1)~(S5)]

CALL(P) 명령을 실행하면 Pn으로 지정된 포인터의 서브루틴 프로그램을 실행합니다.
CALL(P) 명령은 동일 프로그램 파일 내의 포인터로 지정한 서브루틴 프로그램과 공통 포인터로 지정한 서브루틴 프로그램을 실행 할 수 있습니다.
서브루틴 프로그램에서 기능(Function) 디바이스(FX,FY,FD)를 사용하는 경우는 (S1)~(S5) 기능 디바이스에 대응하는 디바이스를 지정합니다.
(S1)~(S5)로 지정된 디바이스 내용은 서브루틴 프로그램 실행 전에 비트 데이터의 내용이 FX에, 워드데이터의 내용이 FD에 전송됩니다.
CALL(P) 명령에서는 (S1)~(S5)까지 사용 가능합니다. 서브루틴 프로그램에서 사용하는 기능 디바이스의 수와 CALL(P) 명령의 인수는 동 수로 할 필요가 있습니다. 또한 기능 디바이스와 CALL(P)의 인수 종류는 동일하게 하십시오. 
CALL(P) 명령에서 인수로 지정한 디바이스 번호는 중복되지 않도록 하십시오. 중복되는 경우에는 정상적으로 연산을 할 수 없습니다. CALL(P) 명령에서 인수로 지정한 워드 디바이스(4워드)를 서브 루틴 프로그램에서 사용하지 마십시오. 사용하게 되면 정상적인 연산을 할 수 없습니다. CALL(P)명령의 네스팅은 16중까지 가능합니다. 단 네스팅의 16중은 CALL(P), FCALL(P), ECALL(P), EFCALL(P) 명령의 합계입니다. 
서브 루틴 프로그램 내에서 ON시킨 디바이스는 서브 루틴 프로그램의 비 실행시에서도 유지됩니다. 서브 루틴 프로그램 실행시에 ON시킨 디바이스는 FCALL(P)명령으로 OFF시킬 수 있습니다.

4) 서브루틴 프로그램에서의 리턴(RET)

▶[RET]

서브루틴 프로그램의 종료를 실행합니다. RET 명령을 실행하면 서브 루틴 프로그램을 호출한 CALL(P), FCALL(P), ECALL(P), EFCALL(P) 명령의 다음 스텝으로 복귀합니다.
다음의 경우에 연산 에러가 되며, 에러플래그(SM0)가 ON하고, 에러코드가 SD0 에 저장됩니다.
CALL(P)명령 실행 후, RET 명령을 실행하기 전에 END, FEND, GOEND, STOP 명령을 실행했을 때(에러코드4211)
CAPP(P) 명령을 실행하기 전에 RET 명령을 실행했을 때 (에러코드: 4212)

 

'PLC' 카테고리의 다른 글

[26]버퍼 메모리 엑세스 명령  (0) 2020.02.19
[25] 데이터 테이블 조작명령  (0) 2020.02.19
C언어 포인터란?  (0) 2020.02.19
[23] 데이터 처리명령  (0) 2020.02.19
[22] 데이터 처리 명령  (0) 2020.02.19

+ Recent posts