앞서 배웠던 내용들로 PLC로 Ladder programming을 짠 후에, HMI로 신호등 화면을 구현할 것이다. 화면 구성은 차량용 신호등, 보행자 신호등가 횡단보도를 보여준다. 초록불은 총 20초이고 초록불이 10초가 남았을 경우 카운트하여 사람들에게 알려주는 프로젝트이다.
보행자 버튼만 IX로 설정하고 나머지는 QX로 설정한다.
전원선이 켜지면 PLC 회로가 계속 돌아간다. 다른 신호와 겹쳐서는 안되니깐 비접점으로 다른 신호등을 만들었다. TP펑션블록을 이용해서 신호가 들어오면 20초동안 작동하도록 차량용 신호등에 청색과 보행자 신호등에 적색 신호가 들어오도록 한다.
황색이 켜지는 경우는 2가지이다. 보행자 버튼을 눌러서 30초후 작동하는 경우와 차량용 신호등이 청색을 지났을 때이다. 이 경우에 조심해야 할 점은 보행자 버튼이 눌려서 30초 후에 작동하는 경우와 청색이 지나서 동시에 일어날 수 있는 경우이다. 그럴 경우를 대비해서 XP-builder의 스크립트 문을 이용해야한다.
첫 번째 if문에서 보행자버튼은 동작형태를 on으로 만들었기 때문에 한번 작동하면 계속 on되어 있는 형태이기 때문에 보행자 버튼을 off로 만들어 주어야 한다. 그것을 위해서 보행자 숫자표시기에 9가 입력되면 보행자 버튼을 off 해주는 역할을 한다.
두 번째 if문은 보행자의 모든 신호등을 TP로 만들었기 때문에 한번 열리면 무조건 20초동안 작동하기 때문에 보행자 버튼이 타이밍 안맞게 작동하면 다른 불과 동시에 작동 할 수 있기 때문에 그것을 방지하기 위해 차량용 황색 불빛이 들어오면 다른 불들이 안들어오게 만드는 스크립트 문이다.
적색이 켜지기 위해서는 차량용 신호등 황색이 끝나면 INST4(TP)를 이용하여 20초동안 작동하게 만들었다. 20초동안 계속 켜져있고 보행자 신호등의 초록색은 10초 동안 계속 작동하고 10초 후에는 깜빡이게 만들었다. INST는 처음에 10초동안 계속 켜져있고 10초후에 INST5,INST7을 이용해 1초마다 깜빡이게 만들었다.
보행자 시간표시기는 처음엔 아무 숫자도 뜨지 않지만, 보행자 횡단보도가 초록불일 경우 꺼지기 10초 전에 깜빡깜빡하면서 남은 시간을 알려주게 만들었다.
INST8은 10초를 카운트하기 위해서 만들었고 TIME_TO를 이용해서 타임형태를 DWORD타입으로 바꾼다음에 DIV펑션을 이용해 timer1을 1000으로 나눈다. 그리고 UDINT_TO를 이용해 최종적으로 int형으로 바꾸어 준다. 마지막으로 SUB를 이용해 9에서 timer3를 뺀값을 시간표시기에 입력한다.(그냥 timer3를 연결하면 1부터 숫자가 10까지 커지기 때문에 sub를 이용하였다.)