(InTouch HMI) 스마트팩토리 -11일차

내 이름 안찬찬·2023년 1월 31일
0
post-thumbnail

실습: InTouch_HMI

1. Conveyor

  • 왼쪽문이 열리면서 드럼통이 나온다.

  • 나와서 오른쪽으로 이동

  • 작아지면서 오른쪽 문으로 들어가게 됨

  • 자동으로 움직임, position 슬라이더로 위치 조정 가능

  • speed 슬라이더(두 번째 슬라이더)로 드럼통 움직이는 속도 조절 가능
    - speed value 0 ~ 10
    - 0일 때는 정지, 10일 때 가장 빠름

  • drum태그의 value가 50일 때, 스티커 붙이는 기계가 드럼통에 스티커 붙이기
    - 스티커 붙이는 기계는 도형으로 간단하게 만들기


양쪽 문 제작

문 한 개당 사각형 세 개 이용

  • 작은 사각형 두 개로 열렸다 닫힘을 표현
  • 양쪽 문이 열리면 큰 사각형에서 드럼통이 나오게 됨

신경써야할 점

  • 문과 문 사이 간격(x축)
  • 문과 드럼통 사이 간격(y축)

애니메이션 링크 Visibility-Discrete 사용 => (작은 문을 없앰으로 문 열림 표현)

왼쪽 문: Value가 0~5일 때 OFF (position < 5)

오른쪽 문: Value가 95 ~ 100일 때 OFF (95 < position AND position <= 100)
AND 없이 95 < position 조건만 쓰더라도 스크립트에서 100보다 큰 수는 막아줌


드럼통 제작

첫 번째 드럼통

  • 문에서 나오는 동작 0 ~ 30, 커지면서 y축 아래쪽으로 가는 동작
  • Value값이 30일 때 드럼통의 크기가 가장 큼



  • 커지면서 y축 아래쪽으로 가는 동작
location -> vertical (수직 이동)

여기서 300은 첫 번째 드럼통에서부터 왼쪽문 까지의 거리
value값이 0 ~ 30일 때 수직 이동
  • x축 오른쪽으로 가는 동작
location -> Horizontal (가로 이동)

여기서 520은 왼쪽 문에서 오른쪽 문 사이의 거리
value값이 31 ~ 70 일 때 가로 이동

두 번째 드럼통 제작

  • value가 70일 때 드럼통 크기가 가장 크고 100일 때 가장 작게 설정
  • value가 70일 때 가장 아래에 위치 100일 때 가장 위에 위치
    (드럼통과 문의 y축 거리 300 AND 수직 이동)




드럼통 Visibility-Discrete 적용

적용 이유

  • 70 ~100 까지의 동작에도 object size와 location 설정이 필요하다.
  • 첫 번째 드럼통에는 모든 애니메이션 링크가 적용 되어있다.
  • 두 번째 드럼통을 만들어 새로운 애니메이션 링크를 적용한다.
  • value가 70일 때 드럼통을 겹쳐 이어지도록 한다.

첫 번째 드럼통 ( position <= 70 일 때 ON)
두 번째 드럼통 ( position <= 70 일 때 OFF)


자동 이동과 속도 조절을 위한 Script

IF position < 100 THEN
	position = position + speed;
ELSE
	position = 0;
ENDIF;

// 100보다 작으면 position +speed를 해주고 그 외에는 position값에 0 대입

스티커 부착 기계

  • 스티커에 Visibility-Discrete 설정 ( postion >= 50 일 때 ON )

  • value에 따른 크기와 위치 설정


2. Traffic light

  • 빨간불 일 때, 횡단보도 앞 정지
  • 횡단보도를 지나고 있을 때, 노란불이 되면 속도를 올림
  • 1호차와 2호차의 속도가 다름

신호등

  • On일 때와 OFF일 때 색상 설정
  • Fill Color - Discrete 적용


신호등과 자동차 Script

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++공부를 시작하니깐 계속해서 힘을 내보도록 하좌!아좌!

profile
스마트팩토리 개발자가 되기 위한 □□ !!

0개의 댓글