실습: InTouch_HMI
왼쪽문이 열리면서 드럼통이 나온다.
나와서 오른쪽으로 이동
작아지면서 오른쪽 문으로 들어가게 됨
자동으로 움직임, position 슬라이더로 위치 조정 가능
speed 슬라이더(두 번째 슬라이더)로 드럼통 움직이는 속도 조절 가능
- speed value 0 ~ 10
- 0일 때는 정지, 10일 때 가장 빠름
drum태그의 value가 50일 때, 스티커 붙이는 기계가 드럼통에 스티커 붙이기
- 스티커 붙이는 기계는 도형으로 간단하게 만들기
문 한 개당 사각형 세 개 이용
신경써야할 점
애니메이션 링크 Visibility-Discrete 사용 => (작은 문을 없앰으로 문 열림 표현)
왼쪽 문: Value가 0~5일 때 OFF (position < 5)
오른쪽 문: Value가 95 ~ 100일 때 OFF (95 < position AND position <= 100)
AND 없이 95 < position 조건만 쓰더라도 스크립트에서 100보다 큰 수는 막아줌
첫 번째 드럼통
location -> vertical (수직 이동)
여기서 300은 첫 번째 드럼통에서부터 왼쪽문 까지의 거리
value값이 0 ~ 30일 때 수직 이동
location -> Horizontal (가로 이동)
여기서 520은 왼쪽 문에서 오른쪽 문 사이의 거리
value값이 31 ~ 70 일 때 가로 이동
적용 이유
첫 번째 드럼통 ( position <= 70 일 때 ON)
두 번째 드럼통 ( position <= 70 일 때 OFF)
IF position < 100 THEN
position = position + speed;
ELSE
position = 0;
ENDIF;
// 100보다 작으면 position +speed를 해주고 그 외에는 position값에 0 대입
IF cycle < 11 THEN {파란불}
cycle = cycle + 0.1;
blue_sign = 1;
yellow_sign = 0;
red_sign = 0;
ELSE IF cycle < 13 THEN {노란불}
cycle = cycle + 0.1;
blue_sign = 0;
yellow_sign = 1;
red_sign = 0;
ELSE IF cycle < 20 THEN {초록불}
cycle = cycle + 0.1;
blue_sign = 0;
yellow_sign = 0;
red_sign = 1;
ELSE
cycle = 0;
ENDIF;
ENDIF;
ENDIF;
IF car1 < 100 THEN
IF car1 > 10 AND car1 < 60 AND yellow_sign == 1 THEN
car1 = car1 + 4;
//노란불에 횡단보도를 지나고 있을 경우 속도를 올림
ELSE IF 10 == car1 AND 13 < cycle THEN
car1 = car1 ;
//횡단보도 앞에서 노란불,빨간불이 될 경우 정지
ELSE
car1 = car1 + 2;
ENDIF;
ENDIF;
ELSE
car1 = 0;
ENDIF;
IF car2 < 100 THEN
IF car2 < 90 AND car2 > 40 AND yellow_sign == 1 THEN
car2 = car2 + 2;
//노란불에 횡단보도를 지나고 있을 경우 속도를 올림
ELSE IF 40 == car2 AND 13< cycle THEN
car2 = car2 ;
//횡단보도 앞에서 노란불,빨간불이 될 경우 정지
ELSE
car2 = car2 + 1;
ENDIF;
ENDIF;
ELSE
car2 = 0;
ENDIF;
실습: XG5000_PLC
보행자가 보행버튼을 누르면 15초 후 차선의 신호등은 황색램프가 점등되며 1초 후 적색으로 바뀐다.
보행자 신호등은 청색램프가 5초간 점등된 뒤 5초간 점멸하며 이후 적색으로 변한다.
각 펑션블록이 어떤 역할인지 설명문 작성
TON펑션 블록
red_sign -> 15초 후 yello_sign을 ON 시키기 위한 펑션블록
yellow_sign -> 1초 후 blue_sign을 ON 시키기 위한 펑션블록
blue_sign -> 운전자_적색등을 ON, blink01 펑션블록을 ON 시키기 위한 펑션블록
blink -> blue_sign으로 부터 신호를 받고, 5초 뒤 blink01을 On시킴
blink01 -> blink로 부터 신호를 받아 1초에 한 번 점멸 하기 위해,
blink02의 값을 B접점으로 둠
blink02 -> blink01의 신호를 받아 1초뒤 켜짐
CTD펑션 블록
1초 주기로 ON,OFF를 실행하는 blink01의 값을 5개 받으면 1이 됨,
초기화 값에 CTD값을 지정하여 한번 1이되면 초기화가 이루어진다.
렁0번째 줄 자기유지회로에 CTD값을 B접점으로 두어 초기화
마무리
실습을 통해 simens 회사의 HMI에 대한 지식을 빠르게 습득 하고있다고 생각한다.
오랜만에 LS사의 PLC프로그램을 사용하였는데, 그동안 벨로그를 쓰면서 복습을 꾸준히 한 덕에 많이 까먹지 않고 금방 작성할 수 있었다.
저번과는 많이 다른 로직의 회로도를 그리게 되긴 했지만 결과에 문제 없으면 장땡이라고 생각한당~ (너무 가독성 떨어지게 그리지만 않으면..)
내일부터는 C++공부를 시작하니깐 계속해서 힘을 내보도록 하좌!아좌!