라벨 프로그래밍의 장점은 선 프로그램, 후 디바이스 어드레스 지정이라 생각을 하고 있습니다.
즉, 보통 디바이스 어드레스가 정해지지 않으면 프로그램 짜기가 용의하지 않는데 반해
라벨 프로그램을 하면 글로벌 또는 로컬 변수를 지정하여 프로그램을 한 다음, 후에 어드레서 지정을 하여
편리하게 쓸 수 있다고 생각하고 있습니다. (아직 라벨 프로그래밍하여 끝낸 프로젝트가 없습니다만 ^^;)
그런데 변수 지정(라벨 지정)에 있어 이러한 기능이 있는지 고수분들의 도움을 받고자 적습니다.
FOR ~ NEXT 문을 돌려서 특정 구문을 반복할때 보통 Z 인덱스를 많이 쓰는데,
선언된 변수에 Z인덱스를 지정하면 어드레스만 변경할수 있는데요
라벨을 인덱스화 할수는 없는건가요?
예를 들어
밸브 1번을 Y0라고 했을때
4개의 밸브가 있으면
보통
------------------------------[MOV K0 Z0]
---------------------------------[FOR K4]
|X0Z0|----------------------------(Y0Z0)
|SM400|--------------------------[INC Z0]
----------------------------------[NEXT]
이런 프로그램을
라벨 프로그램으로 수정하면...
밸브 1번을 Valve_1 이라 라벨을 주고 여기에 Y0Z0
밸브 ON 조건을 Valve_1_On 이라 선언, 여기를 X0Z0 이라 주면
------------------------------[MOV K0 Z0]
---------------------------------[FOR K4]
|Valve_1_On|---------------------(Valve_1)
|SM400|--------------------------[INC Z0]
----------------------------------[NEXT]
이런 꼴이 되는데요
이렇게 되면
밸브 4개의 어드레스가 연속되거나 일률적 간격을 가져야 프로그램이 용이한데
이렇게 되면 라벨 프로그램의장점이 퇴색되는지 않나 싶습니다.
각각 다른 어드레스로 정의된 밸브를 루프로 돌리고 싶습니다.
Valve_1_On <- 라벨 자체를 인덱스할수는 없습니까?
C언어처럼
배열화된 곳에 주소를 담듯이 말입니다.
Valve_1_On[0] 이렇게 말이죠
혹시 이렇게 가능한지 조언 부탁드립니다.
첫댓글 FOR Z2:= 0
TO 10
BY 1 DO
IF M0Z2 = TRUE THEN
VALUE[Z2] := TRUE;
ELSE
VALUE[Z2] := FALSE;
END_IF;
END_FOR;
래더에선 사용이 불가능하더군요. ARRAY지정이 256까지라 그런듯한데 정확한 원인은 모르겠네요. 아직 래더에선 LABEL이 정확히 동작을 안하는듯 합니다.