본문으로 건너뛰기

01. 개발환경

·770 단어수·4 분
산에사는가재
작성자
산에사는가재
광운대학교 컴퓨터정보공학부 학부 졸업생.

본 프로젝트는 KDT 과정인 AI 융합 로봇 SW 개발자(2기)의 교과인 PLC 프로그래밍을 수강하며 구현한 미니프로젝트이다. 우리는 기존에 배운것 이외의 명령어인 CALL, RET, DUTY, MIN 등을 추가로 학습하여 기존의 수업에서 배운 개발 방법을 확장하였다. 이를 통하여 낮은 가독성, 빈번한 이중코일, 낮은 확장성 문제를 개선하데 성공하였다.

1. 하드웨어
#

  • CPU : Q03UDV
  • 전원 모듈 : Q61P
  • 입력 모듈 : QX40
  • 출력 모듈 : QY10
  • 네트워크 모듈 : QJ61BT11N
  • 위키결정 모듈 : QD77MS2
  • HMI : GOT2000

2. 소프트웨어
#

  • Programming and Maintenance Tool: Gx works2(Ver: 1.631H)
  • GOT Screen Design Tool: MELSOFT GT Designer3(Ver: 1.256S)

3. 메모리 맵
#

3.1. 센서 Input
#

No.AddressComment
0X00공급 실린더 후진 완료
1X01공급 실린더 전진 완료
2X02분배 실린더 후진 완료
3X03분배 실린더 전진 완료
4X04가공 실린더 상승 완료
5X05가공 실린더 하강 완료
6X06배출 실린더 후진 완료
7X07배출 실린더 전진 완료
8X08스토퍼 실린더 상승 완료
9X09스토퍼 실린더 하강 완료
10X0A흡착 실린더 후진 완료
11X0B흡착 실린더 전진 완료
12X0C흡착모듈 공작물 여부
13X0D창고 실린더 후진 완료
14X0E창고 실린더 전진 완료
15X0F소재공급 센서1 (원형)
17X11용량형 센서
18X12유도형 센서
19X13스토퍼 감지 센서

3.2. Actuator 및 부저 Output
#

No.AddressComment
0Y20공급 실린더 전진
1Y21공급 실린더 후진
2Y22분배 실린더 전진
3Y23분배 실린더 후진
4Y24가공 실린더 전/후진
5Y25배출 실린더 전진
6Y26배출 실린더 후진
7Y27스토퍼 실린더 전/후진
8Y28흡착 실린더 전진
9Y29흡착 실린더 후진
10Y2A흡착 모듈 ON/OFF
11Y2B창고 실린더 전진
12Y2C창고 실린더 후진
13Y2D드릴 모터 ON/OFF
14Y2E컨베이어 모터 ON/OFF
22Y37부저(Buzzer)

3.3. Servo 모터 I/O
#

SERVO 모터의 경우 위치 결정 모듈인 QD77MS2을 통해 제어한다. 본 프로젝트에서는 해당 모듈은 6번 슬롯에 마운트 되었으며 XY 시작 주소를 70으로 갖는다. 따라서 아래와 같이 I/O가 할당 되었다. 위치결정 기동의 경우 ZP.PSTRT1을 사용하여 SERVO 모터 동작을 구현하였다.

3.3.1. 입력부
#

No.AddressComment
0X70QD77 준비완료
1X71동기용 플래그
8X78축1 에러검출

3.3.2. 출력부
#

No.AddressComment
0Y70PLC Ready
1Y71전체축 서보 ON
4Y74축1 정지

3.3.3. 버퍼 메모리 할당표
#

No.Buffer AddressPLC 표현기능
0G802U7\G802현재 위치 데이터
1G804U7\G804현재 속도 데이터
2G806U7\G806서보 상태/피드백 데이터
3G807U7\G807알람/상태 코드
4G1502U7\G1502기동 명령/스타트 트리거

3.4. 릴레이, 레지스터 할당 영역
#

본 프로젝트는 모듈화를 통해 문제를 해결하는 것이 목표이다. 따라서 각 기능 단위로 모듈을 분리하여 구현되었으며 모듈에서 사용하는 범위 내의 릴레이, 레지스터의 경우 외부에서 사용하지 말아야 한다. 기존의 C++와 같은 고급 프로그래밍 언어와 달리 PLC 에서는 특정 범위 내의 릴레이, 레지스터의 접근을 숨길 수 없다. 따라서 각 모듈에서 사용하는 릴레이, 레지스터의 범위를 명시하여 다른 개발자가 사용하지 않도록 해야한다. 아래는 각 모듈에서 사용한 릴레이, 레지스터의 범위를 릴레이, 레지스터 기능으로 나누어 표로 나타낸 것이다. 구현된 서브 프로그램(모듈은) SERVO, ACTUATOR, STORAGE 가 총 3가지가 있으며, 메인 프로그램으로 MAIN, PART1, PART2, PART3, PART4, LAMP가 있다. 아래의 표는 메인 프로그램은 Program, 모듈은 Module로 표기하여 할당 영역을 표기한 표이다.

3.4.1. Internal Relay
#

No.Internal Relay rangeProgram
0\([M50, M59]\)LAMP
1\([M200, M202]\)비상(전체 프로그램)
2\([M500, M599]\)PART1
3\([M600, M699]\)PART2
4\([M700, M799]\)PART3
5\([M800, M899]\)PART4
6\([M990, M999]\)MAIN
No.Internal Relay rangeModule
0\([M100, M199]\)SERVO
0\([M240, M299]\), \([M1000, M1009]\)ACTUATOR
0\([None]\)STORAGE

3.4.2. Data Register
#

No.Internal Relay rangeProgram
0\([None]\)LAMP
1\([None]\)비상(전체 프로그램)
2\([None]\)PART1
3\([D600, D699]\)PART2
4\([D700, D799]\)PART3
5\([D800, D899]\)PART4
6\([D1000, D1099]\)MAIN
No.Internal Relay rangeModule
0\([D100, M199]\)SERVO
0\([None]\)ACTUATOR
0\([D300, D399]\), \([D0, D30]\)STORAGE

3.4.3. Timer
#

No.Internal Relay rangeProgram
0\([None]\)LAMP
1\([None]\)비상(전체 프로그램)
2\([None]\)PART1
3\([T600, T699]\)PART2
4\([T700, T799]\)PART3
5\([T800, T899]\)PART4
6\([None]\)MAIN
No.Internal Relay rangeModule
0\([T100, T199]\)SERVO
0\([T1000, T1009]\)ACTUATOR
0\([None]\)STORAGE

3.4.4. Counter
#

No.Internal Relay rangeProgram
0\([None]\)LAMP
1\([None]\)비상(전체 프로그램)
2\([None]\)PART1
3\([C600, C699]\)PART2
4\([C700, C799]\)PART3
5\([C800, C899]\)PART4
6\([None]\)MAIN
No.Internal Relay rangeModule
0\([None]\)SERVO
0\([None]\)ACTUATOR
0\([None]\)STORAGE